IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Fonctionnement de max_execution_time


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Fonctionnement de max_execution_time
    Bonjour à tous,

    Je suis sur un serveur mutualisé sur lequel j'ai mis le nombre de seconde max pour max_execution_time soit 300s.

    J'ai une page PHP où j'ai mis un calcul du temps d’exécution (microtime).
    Cette page va récupère un fichier XML, le converti en tableau puis boucle sur les données.
    J'enregistre les données dans une BD, copie les photos externes et les redimensionne.
    Pour le test je réalise 2 et 3 fois la boucle (le fichier XML évolue et pourra être bien plus fourni).
    Tout fonctionne très bien, ce que je ne comprend pas c'est que cette exécution prend pour la boucle x2 environ 485 secondes et pour la boucle x3 environ 751s alors que max_execution_time est à 300s ... et ça ne bloque pas !

    Pour être sûr que ça continuera de fonctionner, j'aimerai comprendre pourquoi mon script n'est pas bloqué alors qu'il dépasse la limite.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Je suis sur un serveur mutualisé sur lequel j'ai mis la nombre de seconde max pour max_execution_time soit 300s.
    Comment t'y prends-tu ?
    Comment vérifies-tu que ton paramétrage est effectif ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Je m'y prend tout simplement en mettant 300 dans le champ correspondant de l'administration de mon hébergeur et je vérifie avec phpinfo.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Colonne "local value" ou "master value" ?
    Où est exécuté le phpinfo() ?

    Utilise plutôt get_cfg_var() et ini_get() au plus près de ton script.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    J'ai bien 300 dans les 2 colonnes du phpinfo et je l'exécute dans le même fichier.
    En valeur de retour j'ai :
    ini_get('max_execution_time') = 300
    get_cfg_var('max_execution_time') = 10
    get_cfg_var('cfg_file_path') = /opt/php8.1/lib/php.ini

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Je ne vois pas d'où peut venir le dépassement du max_execution_time.

    Dans un tout nouveau script, essaie de faire un simple sleep(310); pour voir.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par xtremdisc Voir le message
    Bonjour à tous,

    Je suis sur un serveur mutualisé sur lequel j'ai mis le nombre de seconde max pour max_execution_time soit 300s.

    J'ai une page PHP où j'ai mis un calcul du temps d’exécution (microtime).
    Cette page va récupère un fichier XML, le converti en tableau puis boucle sur les données.
    J'enregistre les données dans une BD, copie les photos externes et les redimensionne.
    Pour le test je réalise 2 et 3 fois la boucle (le fichier XML évolue et pourra être bien plus fourni).
    Tout fonctionne très bien, ce que je ne comprend pas c'est que cette exécution prend pour la boucle x2 environ 485 secondes et pour la boucle x3 environ 751s alors que max_execution_time est à 300s ... et ça ne bloque pas !

    Pour être sûr que ça continuera de fonctionner, j'aimerai comprendre pourquoi mon script n'est pas bloqué alors qu'il dépasse la limite.

    Merci d'avance.
    max_execution_time se rapporte au temps d'execution du script lui-même et donc tout ce qui ne dépend pas du script n'est pas compté, notamment: les flux, les requêtes aux bases de données et les appels systèmes.
    D'aprés ta description, le gros du temps doit être utilisé à la copie des photos, ce temps n'est pas pris en compte. Je me demande même si le redimensionnement est compté, car aprés tout le module gd n'est qu'un wrapper, la part de PHP y est faible, à vérifier cela dit.

    Si tu veux gagner un peu de temps, supprime l'étape "je convertis en tableau" (qui ne sert à rien) et lit les informations dont tu as besoin directement dans le XML via XMLReader, puis traite les au fur et à mesure sans les stocker dans un tableau.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Bonjour Séb et CosmoKnacki,

    Dans un tout nouveau script, essaie de faire un simple sleep(310); pour voir.
    La fonction sleep n'est pas prise en compte pour le temps d’exécution sur les serveurs non windows et mon serveur est sous linux, donc ce test n'est pas concluant.


    D'aprés ta description, le gros du temps doit être utilisé à la copie des photos
    En effet j'ai triplé le nombre de photos pour voir et calculé le temps d’exécution de la copie et du redimensionnement, sur un total de 1231,44s pour tout le script, 1230,79s sont utilisées pour les photos.
    En détail 1043s pour la copie et 187s pour le redimensionnement.

    Avec max_execution_time à 300s le script s'est exécuté entièrement par contre en le baissant à 100s l'erreur "Maximum execution time" s'est produite.
    On peut donc conclure que la copie n'est pas prise en compte dans le temps d'exécution mais le redimensionnement l'est.

    Merci pour vos idées, ça m'a permis d’approfondir le fonctionnement de max_execution_time.

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Merci pour vos idées, ça m'a permis d’approfondir le fonctionnement de max_execution_time.
    Et moi aussi par la même occasion

    set_time_limit() => https://www.php.net/manual/fr/functi...time-limit.php

    Note:
    La fonction set_time_limit() et la directive de configuration max_execution_time n'affectent que le temps d'exécution du script lui-même. Tout temps passé en dehors du script, comme un appel système utilisant system(), des opérations sur les flux, les requêtes sur base de données, etc. n'est pas pris en compte lors du calcul de la durée maximale d'exécution du script. Ceci est faux sous Windows où le temps mesuré est le temps réel.
    Le piège est que le comportement est différent sous Windows et sous Linux.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Et moi aussi par la même occasion


    En bonus un commentaire trouvé dans le manuel :
    Note: The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running.

    En français :
    Remarque : La fonction set_time_limit() et la directive de configuration max_execution_time n'affectent que le temps d'exécution du script lui-même. Tout temps consacré à une activité qui se produit en dehors de l'exécution du script, comme les appels système utilisant system(), la fonction sleep(), les requêtes de base de données, etc. n'est pas inclus lors de la détermination de la durée maximale d'exécution du script.

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  2. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  3. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. Fonctionnement de la compression DivX
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/09/2002, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo