OVH Cloud OVH Cloud

duree d'exexution d'un programme tr op longue

6 réponses
Avatar
G Roydor
bonjour,

j'ai un programme dont la durée en fin d'année est trop longue;

message :
Fatal error: Maximum execution time of 30 seconds exceeded in ....

Comment faire ? est-ce l'hébergeur ou puis je modifier le temps imparti
pour cette exécution ?

Merci
GR

6 réponses

Avatar
Daedalus
Voir ini_set(): http://fr.php.net/ini_set option max_execution_time ou
encore set_time_limit(): http://fr.php.net/manual/fr/function.ini-set.php

Dae


"G Roydor" wrote in message
news:
bonjour,

j'ai un programme dont la durée en fin d'année est trop longue;

message :
Fatal error: Maximum execution time of 30 seconds exceeded in ....

Comment faire ? est-ce l'hébergeur ou puis je modifier le temps imparti
pour cette exécution ?

Merci
GR


Avatar
fp
bonjour,

j'ai un programme dont la durée en fin d'année est trop longue;

message :
Fatal error: Maximum execution time of 30 seconds exceeded in ....

Comment faire ? est-ce l'hébergeur ou puis je modifier le temps imparti
pour cette exécution ?

Merci
GR


Bonjour,

La bonne solution est d'optimiser le code pour une exécution plus rapide
et la moins bonne est de modifier les paramètres de php
(/etc/php/apache/php.ini) pour augmenter la durée d'exécution autorisée.

--
Cordialement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FP http://www.michaud.tk

Avatar
Daedalus
Bonjour,

La bonne solution est d'optimiser le code pour une exécution plus rapide
et la moins bonne est de modifier les paramètres de php
(/etc/php/apache/php.ini) pour augmenter la durée d'exécution autorisée.



C'est un peu simpliste, il existe bons nombres de situations ou le script
doit s'éxecuter au-delà des 30 sec (par défaut) sans qu'on puisse parler de
code non-optimisé. Donc de parler de "bonne" et "moins bonne" sans connaître
les détails de l'application... Par exemple un script devant accèder à plus
d'une 10aine de pages web (externes) pour en extraire certain partie (des
titres d'articles par exemple) pour les placer dans une base de données.
Étant dépendant de la vitesse de transfert du server sur lequel réside les
pages, il peut devenir nécessaire d'augmenter le temps d'execution. Même
chose si on désire envoyer des fichier plutôt volumineux via un script php,
car on ne peut garantir la vitesse de transfert dont l'usager dispose.
Certaines manipulations complexe sur des fichiers volumineux peuvent aussi
demander un temps d'éxecution plus élevé.

Ceci dit, comme dans la majorité des cas 30 sec est amplement suffisant,
modifier la valeur dans php.ini est presque toujours la mauvaise option. Les
fonctions ini_set() et set_time_limit() sont de bien meilleures options pour
modifier le temps d'execution dans les script où cela devient nécessaire.

Dae

Avatar
Guillaume Bouchard
G Roydor wrote:
bonjour,


Bonjour/soir (ne pas rayer la mention utile)

j'ai un programme dont la durée en fin d'année est trop longue;


La durée en fin d'année ?

message :
Fatal error: Maximum execution time of 30 seconds exceeded in ....

Comment faire ? est-ce l'hébergeur ou puis je modifier le temps imparti
pour cette exécution ?


Je vais apporter un completement de reponse à ce que qui t'a déjà été
fournit.

Dans le cas ou il s'agit d'un serveur que tu maitrises et sur lequel tu
sais que tu ne pourris pas la totalité du proc pour toi tout seul alors
que plein d'autre personnes sont demandeuse, tu peux à la limite
utiliser le init_set dans le cas d'un script qui est sensé être long.
(Gros traitement de bdd ou truc dans le genre.)

Mais je ne sais pas si à ce moment il ne serait pas preferable de faire
un programme/script executé directement sur le serveur (et non pas par
le serveur web) dans un langage plus adapté à ce genre de gros
traitements ? (C, ..)

Maitenant, si il s'agit d'un script qui n'est pas sensé duré autant de
temps et/ou que tu es sur un serveur ou tu risque d'ennuyer tout le
monde avec ton utilisation CPU, il n'y à qu'une seule solution :
l'optimisation. Bien souvent les requetes SQL sont consomatrices de
ressources et de temps et la pose d'un index à un bon endroit peux
considerablement augmenter les performances. Pour exemple, j'ai un jour
"optimiser" le forum d'un ami qui mettait 20 secondes à se generer, avec
la pose de 2 index, le temps à chuter à moins de 0.4 secondes, d'ou un
gain plutôt interessant.

Je te renvoies à des newsgroups ou de la doc plus adapaté pour ce problème.

--
Guillaume.
"Les matrices c'est comme le film matrix où Nemo voie qu'il s'agit en
fait d'applications lineaires."

--
Guillaume.

Avatar
John Gallet
Bonjour,


j'ai un programme dont la durée en fin d'année est trop longue;


Si applicable : sauvegarde des résultats intermédiaires tous les mois et
refais le calcul sur 12 mois maximum, ça évitera de mouliner une année
complète.
Parfois on peut même tenir à jour les informations en temps réel (i.e. à
chaque modification).

Comment faire ?


Changer d'algorithme, virer les couches inutiles. 30 secondes de CPU,
c'est déjà pas mal.

a++
JG

Avatar
John Gallet
Bonjour,

il existe bons nombres de situations ou le script
doit s'éxecuter au-delà des 30 sec (par défaut) sans qu'on puisse parler de
code non-optimisé.


30 secondes de CPU pour une requête de type http, il y a potentiellement
un problème. Le seul cas acceptable est celui où on voudrait en fait
bien le faire en ligne de commande (type batch) mais la configuration
locale (hébergement etc...) l'interdit.

Étant dépendant de la vitesse de transfert du server sur lequel réside les
pages, il peut devenir nécessaire d'augmenter le temps d'execution.


Non car les IO ne sont pas comptés. C'est du temps CPU, sur unix en tous
cas, sur windows c'est le bordel (i.e. les tests que j'ai fait ne
montrent pas de logique entre les différentes versions de windows/php,
mais j'ai pas joué avec depuis un moment).

<MAN http://fr2.php.net/manual/en/function.set-time-limit.php>
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(), stream operations, database
queries, etc. is not included when determining the maximum time that the
script has been running.
</MAN>

chose si on désire envoyer des fichier plutôt volumineux via un script php,
car on ne peut garantir la vitesse de transfert dont l'usager dispose.
Idem, ce sont des IO.


Certaines manipulations complexe sur des fichiers volumineux peuvent aussi
demander un temps d'éxecution plus élevé.
Là oui en effet, du retraitement d'image par exemple, je veux bien le

croire, mais il faut alors se demander si c'est bien PHP l'outil le plus
approprié à ce qu'on est en train de faire. Et si on traite un fichier
texte maousse costaud, c'est qu'on est en type de traitement batch, pas
http.

Ceci dit, comme dans la majorité des cas 30 sec est amplement suffisant,
modifier la valeur dans php.ini est presque toujours la mauvaise option.
On est d'accord.


fonctions ini_set() et set_time_limit() sont de bien meilleures options pour
modifier le temps d'execution dans les script où cela devient nécessaire.


Oui sur le principe théorique, bof en pratique : set_time_limit est
désactivée par le safe_mode, et ini_set a (fort heureusement) beaucoup
de restrictions de droits.

a++
JG