[PHP] maximum execution time...

Si vous voulez parler de code, programmation ou autres routines, c par là !

Modérateur : Modérateurs

the beginner
Apprenti
Apprenti
Messages : 35
Inscription : mer. févr. 12, 2003 5:37 pm

[PHP] maximum execution time...

Message 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:
Avatar de l’utilisateur
bruce
Superviseur
Superviseur
Messages : 1409
Inscription : mer. avr. 18, 2001 2:00 am
Localisation : In da beat we trust !
Contact :

Message par bruce »

Si tu donnais un peu du source...
A+++
Bruce aka Lemmings
www.bheller.com
the beginner
Apprenti
Apprenti
Messages : 35
Inscription : mer. févr. 12, 2003 5:37 pm

voilà un peu de source:-)))

Message 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:
Avatar de l’utilisateur
bruce
Superviseur
Superviseur
Messages : 1409
Inscription : mer. avr. 18, 2001 2:00 am
Localisation : In da beat we trust !
Contact :

Message 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...
A+++
Bruce aka Lemmings
www.bheller.com
the beginner
Apprenti
Apprenti
Messages : 35
Inscription : mer. févr. 12, 2003 5:37 pm

je me disais aussi

Message 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:
Avatar de l’utilisateur
bruce
Superviseur
Superviseur
Messages : 1409
Inscription : mer. avr. 18, 2001 2:00 am
Localisation : In da beat we trust !
Contact :

Re: je me disais aussi

Message 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.
A+++
Bruce aka Lemmings
www.bheller.com
the beginner
Apprenti
Apprenti
Messages : 35
Inscription : mer. févr. 12, 2003 5:37 pm

suite...

Message 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:
Avatar de l’utilisateur
bruce
Superviseur
Superviseur
Messages : 1409
Inscription : mer. avr. 18, 2001 2:00 am
Localisation : In da beat we trust !
Contact :

Message par bruce »

Heu non c faisable aussi mais dans ce cas limite le nombre de tof par pages...
A+++
Bruce aka Lemmings
www.bheller.com
the beginner
Apprenti
Apprenti
Messages : 35
Inscription : mer. févr. 12, 2003 5:37 pm

okai merci

Message par the beginner »

c'est ce que j'ai fait finalement...
merci et a+++ :love:
comme pour tout mes messages -> merci et a+++ :love:
Répondre