Page 1 sur 1

[PHP] maximum execution time...

Publié : dim. août 24, 2003 7:36 pm
par the beginner
Fatal error: Maximum execution time of 30 seconds exceeded in ...

voilà l'erreur que j'obtiens quand j'exécute ma page php.
cela se produit alors que j'utilise "imagecreatefromJPEG" en envoyant diverses données vers ma base de données...

il est vrai que je passe en revue un grand nombre de fichiers (jpeg plus particulièrement) donc je comprend que le traitement de la page dure plus de 30 secondes mais voilà je ne sais pas comment optimiser le tout pour que cela soit moins long...

comment puis-je faire???

merci et a+++ :love:

Publié : jeu. août 28, 2003 4:07 am
par bruce
Si tu donnais un peu du source...

voilà un peu de source:-)))

Publié : sam. août 30, 2003 11:43 am
par the beginner
comme tu me l'a demandé voilà le souce de la plus grosse boucle du script :

Code : Tout sélectionner

  for ($A=0; $A<count($TABLEAU); $A++) {
    $ID_DOSSIER = 1; /* ID POUR CHAQUE DOSSIER, RECOMMENCE A 1 AU DEBUT DU DOSSIER */
    $TABLEAU[$A]["CHEMIN_COMPLET"] = str_replace("\\", "/", $TABLEAU[$A]["CHEMIN_COMPLET"]);

    $OPEN_DIR2 = opendir($TABLEAU[$A]["CHEMIN_COMPLET"]);
    chdir($TABLEAU[$A]["CHEMIN_COMPLET"]);

    while ($NOM_FICHIER = readdir($OPEN_DIR2)) {
      if (is_file($NOM_FICHIER)) {
        $FILE_AND_EXTENSION = explode(".", $NOM_FICHIER);

        if (($FILE_AND_EXTENSION[1] == "jpg") || ($FILE_AND_EXTENSION[1] == "JPG")) {

/* VARIABLES CONCERNANT LES IMAGES ET LES APERCUS */

          $HANDLE = ImageCreateFromJPEG($TABLEAU[$A]["CHEMIN_COMPLET"].$NOM_FICHIER);
          $DX = ImageSX($HANDLE);
          $DY = ImageSY($HANDLE);

          if (($DX == 1024) || ($DX == 640)) {
            /* PETITE IMAGE */
            $WIDTH_PTE_IMG = 128;
            $HEIGHT_PTE_IMG = 96;
            /* FNTR APERCU */
            $WIDTH_FNTR_APERCU = 670;
            $HEIGHT_FNTR_APERCU = 510;
          }
          elseif (($DX == 768) || ($DX == 480)) {
            /* PETITE IMAGE */
            $WIDTH_PTE_IMG = 96;
            $HEIGHT_PTE_IMG = 128;
            /* FNTR APERCU */
            $WIDTH_FNTR_APERCU = 510;
            $HEIGHT_FNTR_APERCU = 670;
          }
          ImageDestroy($HANDLE);
          /* FIN PARAMETRES IMAGE, FNTR APERCU */

/* FIN VARIABLES CONCERNANT LES IMAGES ET LES APERCUS */

          /* LISTE DES VARIABLES A TRANSMETTRE */
          $CHEMIN_COMPLET = $TABLEAU[$A]["CHEMIN_COMPLET"];
          $DOSSIER = $TABLEAU[$A]["DOSSIER"];
          $PHOTO = $NOM_FICHIER;
          $LARGEUR_INIT = $DX;
          $LARGEUR = $WIDTH_PTE_IMG;
          $HAUTEUR = $HEIGHT_PTE_IMG;
          $LARGEUR_FNTR = $WIDTH_FNTR_APERCU;
          $HAUTEUR_FNTR = $HEIGHT_FNTR_APERCU;
          /* FIN LISTE DES VARIABLES A TRANSMETTRE */

/* INSERTION DES NOMS DES FICHIERS DANS LA BASE DE DONNEES */
          $INSERT_NOM_PHOTO = @mysql_query("INSERT INTO photos ".
               "( ".
                "ID, ID_DOSSIER, CHEMIN_COMPLET, DOSSIER, PHOTO, ".
                "LARGEUR_INIT, LARGEUR, HAUTEUR, LARGEUR_FNTR, HAUTEUR_FNTR ".
               ") ".
               "VALUES ".
              "( ".
                  "'$ID', '$ID_DOSSIER', '$CHEMIN_COMPLET', '$DOSSIER', '$PHOTO', ".
                  "'$LARGEUR_INIT', '$LARGEUR', '$HAUTEUR', '$LARGEUR_FNTR', '$HAUTEUR_FNTR' ".
               ")");
/* FIN INSERTION DES NOMS DES FICHIERS DANS LA BASE DE DONNEES */
          $ID_DOSSIER++;
        }
      }
    }
    closedir($OPEN_DIR2);
  }

c'est cette boucle for qui prends le plus de temps à l'exécution
le reste n'est que fioriture...

sur ce a+++ et merci

:love:

Publié : sam. août 30, 2003 7:57 pm
par bruce
Utilise la balise "code" quand tu veux mettre du source ;) G édité ton message.

Bon sinon à premiere vue je vois pas de problème mais c'est possible que le script soit long si le serveur de fichier est lent ou que la machine soit peu puissante...

je me disais aussi

Publié : sam. août 30, 2003 8:52 pm
par the beginner
c'est vrai que mon mesg à une autre gueule que qd je l'ai post tt à l'heure.

sinon tu n'as pas de solution pour mon prob?
y'a pas moyen de mettre une pause dans un script, ou alors un moyen pour arreter et reprendre le script ake apparement sur easyphp le temps d'exécution max c'est 30 secondes mais pour free il est de 5 sec, alors pour charger un max d'info c'est pas pratique...

et pour la puissance de la machine je pense pas que ce soit ça
ou alors j'ai vraiment besoin d'un truc surpuissant :pt1cable:

sinon tant pis j'essayerai de trouver autre chose...

a+++ et merci :love:

Re: je me disais aussi

Publié : sam. août 30, 2003 9:53 pm
par bruce
the beginner a écrit :c'est vrai que mon mesg à une autre gueule que qd je l'ai post tt à l'heure.

sinon tu n'as pas de solution pour mon prob?
y'a pas moyen de mettre une pause dans un script, ou alors un moyen pour arreter et reprendre le script ake apparement sur easyphp le temps d'exécution max c'est 30 secondes mais pour free il est de 5 sec, alors pour charger un max d'info c'est pas pratique...

et pour la puissance de la machine je pense pas que ce soit ça
ou alors j'ai vraiment besoin d'un truc surpuissant :pt1cable:

sinon tant pis j'essayerai de trouver autre chose...

a+++ et merci :love:
Je sais pas trop là à lire le script comme ça je vois pas de "problème" mais g pas été voir en détail... Essaye de chronometrer chaque étape (affichage d'un timestamp à chaque boucle) pour voir ou ça coince.

suite...

Publié : dim. août 31, 2003 11:02 am
par the beginner
j'ai fait comme tu m'as dit (utilisation d'un timestamp) mais je ne trouve rien d'anormal.
le problème vient peut-être du fait que les dossiers à parcourir contiennent presque 300 fichiers pour un total de 100Mo???

je m'explique sur cette quantité : j'ai fait un truc qui me permet (comme zoombrowser par exemple) de faire un diaporama et des aperçus de photos.

maintenant tu vas me dire pourquoi faire un truc toi même quand tout existe déjà??? mais pour le "fun" (y'en a qui ne savent plus comment s'amuser :pt1cable: )...
mais pour éviter ces problèmes eske tu me conseillerais par exemple de le programmer par l'intermédiaire d'un logiciel comme visual c++ ou borland c++ builder et pour cela abandonner l'histoire du diaporama par la page web???

sur ce merci et a+++ :love:

Publié : mar. sept. 02, 2003 2:13 am
par bruce
Heu non c faisable aussi mais dans ce cas limite le nombre de tof par pages...

okai merci

Publié : mar. sept. 02, 2003 9:49 am
par the beginner
c'est ce que j'ai fait finalement...
merci et a+++ :love: