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 :

Comment dépasser les 30 secondes ?


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut Comment dépasser les 30 secondes ?
    Bonjour à tous,

    je désire faire des calculs sur ma base qui est très importante. Mais cela prend 45 secondes. et bien sûr j'ai droit au fatal :

    'Fatal error: Maximum execution time of 30 seconds exceeded in d:\easyphp1-8\www\whombat\index.php on line 107'

    Comment faire pour passer ce cap ?

    Merci de vos conseils.

    Cordialement.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    Bonsoir
    tu dois modifier php.ini
    Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;

    max_execution_time = 30 ; Maximum execution time of each script, in seconds
    tu dois donc modifier max_execution_time = 30
    Si tu n'as pas accés a php.ini
    Je ne crois pas que tu puisse modifier la durée sauf erreur de ma part

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    • Pour les besoins d'un script : set_time_limit ou par ini_set
    • Pour les besoins des scripts situés dans un même répertoire (partie administration par exemple), par htaccess :
      Code X : Sélectionner tout - Visualiser dans une fenêtre à part
      php_value max_execution_time 60
    • Pour l'ensemble de vos scripts (à ne surtout pas faire dans un contexte web et la valeur par défaut est une exécution illimitée en passant par l'interpréteur de commande) : modifier le fichier php.ini, directive max_execution_time.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    merci pour l'info on peut donc modifier ça dans le script autant pour moi

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    Merci pour tous ces tuyaux.

    Nouvelle question du même genre : passer 30 secondes ça fait long pour le visiteur, peut-on, comme en VB par exemple, mettre un sablier au pointeur de souris ?

    J'avoue que j'ai cherché mais je n'ai rien trouvé. D'habitude, IE le met tout seul mais là il ne me le met pas.

    D'autre part, il n'affiche pas les cadres et décors prévus pourtant avant le script de tri de bdd. Il y a-t-il une technique du style xx=doevents() en VB qui oblige le script a s'exécuter avant d'aller plus loin ? Là aussi j'ai cherché mais en vain.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut
    Bonsoir,

    Citation Envoyé par Whombat Voir le message
    Nouvelle question du même genre : passer 30 secondes ça fait long pour le visiteur, peut-on, comme en VB par exemple, mettre un sablier au pointeur de souris ?

    J'avoue que j'ai cherché mais je n'ai rien trouvé. D'habitude, IE le met tout seul mais là il ne me le met pas.
    Il suffit pour cela de rajouter un style CSS sur l'élément BODY du DOM:
    cursor: wait;
    Mais encore faut-il qu'une page soit affichée. Si la page précédente est toujours chargée dans le navigateur (le navigateur attend une réponse du serveur avant de décharger la page précédente), activez cette règle au moment d'émettre la requête.

    Citation Envoyé par Whombat Voir le message
    D'autre part, il n'affiche pas les cadres et décors prévus pourtant avant le script de tri de bdd. Il y a-t-il une technique du style xx=doevents() en VB qui oblige le script a s'exécuter avant d'aller plus loin ? Là aussi j'ai cherché mais en vain.
    Cela doit signifier que PHP n'a pas encore envoyé la moindre donnée au navigateur. Les commandes echo|print|printf provoque l'ajout des arguments fournis dans une mémoire tampon qui ne sera vidé que lorsqu'il est plein, ou le script entièrement exécuté. Ca évide de très nombreux petits échanges entre le client et le serveur et prévient donc d'une saturation réseau.
    Comme vous souhaitez outre-passer ce comportement, invoquez la commande 'flush()' juste avant d'invoquer votre longue commande pour ordonner à PHP de transferer les données en attente au navigateur.

    Dans le cas où l'utilisateur n'a pas besoin d'attendre le résultat de la commande, je vous conseillerais plutôt de la lancer dans un nouveau processus.
    Par exemple, vous pouvez délocaliser le traitement dans un nouveau fichier PHP et le lancer par la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec ('php ./mon_fichier.php &')
    'php' indique qu'on exécute le moteur PHP, à qui on passe comme argument le chemin d'accès au script. Le '&' est un mot Shell sur les plateformes Unixoïdes pour réclamer la création d'un nouveau processus, ne paralysant ainsi pas l'exécution courante.
    Si vous avez besoin d'arguments au script de traitement (sinon l'intervention d'un utilisateur ne serait probablement pas utile ;o) ), je n'ai pas les informations sous la main. Cependant, vous devriez pouvoir les trouver facilement, soit en exécutant 'php --help' qui devrait fournir une liste des options possibles, soit en explorant la documentation PHP, du côté des exécutions en ligne de commande.

    Pour finir, un petit avertissement: PHP a la tendance par défaut de tuer le script en cours lorsque l'utilisateur ferme la connection au serveur (en cliquant sur le bouton 'arrêter', ou en changeant de page). Si ce n'est pas souhaitable et que le traitement doit poursuivre même lorsque l'utilisateur abandonne la requête (ce qui peut-être courant face à un utilisateur lambda), il existe d'une part la méthode que je viens de vous proposer et d'autre part une option à activer dans 'php.ini' (dont je ne connais pas le nom) qui permet de poursuivre l'exécution du script même lorsque l'utilisateur l'abandonne.
    Une nouvelle attention encore sur ce dernier cas, vous ne voudrez peut-être pas que l'utilisateur exécute n-fois de suite le traitement et il faudra alors passer par un moyen de prévenir l'exécution du traitement si un traitement est déjà en cours.

    Cordialement,


    Julien

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/03/2010, 16h31
  2. Réponses: 7
    Dernier message: 13/01/2008, 16h52
  3. Réponses: 3
    Dernier message: 11/07/2007, 15h36
  4. Comment faire un clear sur un beufferedImage toutes les x secondes!
    Par jlassiramzy dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 26/07/2006, 13h18

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