Précédent   Forum des professionnels en informatique > PHP > Outils
Outils Forum d'entraide sur les outils pour développeurs PHP : EDI, installation, administration... Avant de poster : FAQ outils, toutes les FAQ PHP et les comparatifs
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2007, 23h28   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 183
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 183
Points : 33
Points : 33
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.
Whombat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 23h35   #2
Membre habitué
 
Inscription : janvier 2007
Messages : 225
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 225
Points : 115
Points : 115
Envoyer un message via MSN à laurentg2003
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
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 23h38   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
  • 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 :
    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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 00h00   #4
Membre habitué
 
Inscription : janvier 2007
Messages : 225
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 225
Points : 115
Points : 115
Envoyer un message via MSN à laurentg2003
merci pour l'info on peut donc modifier ça dans le script autant pour moi
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 00h10   #5
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 183
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 183
Points : 33
Points : 33
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.
Whombat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 00h59   #6
Invité de passage
 
Inscription : octobre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 4
Points : 4
Points : 4
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 :
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
jplee est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h44.


 
 
 
 
Partenaires

Hébergement Web