Détercter un execution time out [Résolu]

Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
- - Dernière réponse : cs_caviar
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
- 14 nov. 2007 à 15:00
    Saluté,
j'ai un fichier php qui génère des vignettes à partir d'images ...
bon l'idée est qu'il ne génère une vignette que si elle n'existe pas ...
mais c'est assez long..du coup je dois le relancer plusiers fois à la main pour qu'il continue de traiter ce que n'a pas déjà été généré...
j'aimerai détecter l'execution time out pour reboucler automatiquement le fichier sur lui même tant que toutes les vignettes ne sont pas générées ...
savez vous si c'ets possible ?
thxx !
@+
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
2492
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
12
3
Merci
Salut,

Au moment du timeout, c'est déjà trop tard...
Tu peux connaitre le temps maximum d'execution avec :
$t = ini_get('max_execution_time');
qui retourne un entier correspondant au temps en secondes.

Tu peux changer cette valeur avec :
ini_set('max_execution_time', XX);
ou bien
set_time_limit(XX);

Cependant, on ne peut pas modifier le temps maximum d'exécution quand le serveur est configuré en SAFE MODE : cette configuration dépend des hébergeurs. Pour savoir si SAFE MODE est activé => phpinfo()

Comme tu ne peux pas réellement détecter le moment ou le timeout survient, tu peux essayer de bidouiller un peu.
Il te faut un compteur, que tu incrémentes à chaque vignette générée.
Il te faut aussi initialiser un compteur de temps au début du script
Si tu es en php5 :

$start_time = microtime(true);

Si tu es en php4 :

list($usec, $sec) = explode(" ", microtime());
$start_time = (float)$usec + (float)$sec;

Après avoir généré une vignette, tu vérifies si le temps restant avant le timeout (max_execution_time - start_time) est suffisant pour générer 2 vignettes. Si oui, tu continues ta boucle. Sinon, tu sors de la boucle (break) et tu recharges la page ( header('Location: /url') )

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de neigedhiver
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
0
Merci
    yes c'est ce que j'ai fait !
... lol ah la bidouille ;) ;)
merci
@+
Commenter la réponse de cs_caviar
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Hello,

ou ars tu utilises mon NO TIMEOUT PACKAGE
http://www.phpcs.com/codes/PHP5-NOTIMEOUT-PACKAGE_39866.aspx
qui se sert de javascript et d'ajax pour faire de gros traitements sans se heurter au max_execution_time de php, justement.
:-)
Commenter la réponse de malalam
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
0
Merci
    Yep ! j'avais deja vu ta source du no time out package mais j'ai eu du mal à l'utiliser....
je sais pas si ajax est très adapté à mon pb là ... car c'est un script php qui va être appelé via une application en flash en fait ...
vuala koi :)
++ et merci
Commenter la réponse de cs_caviar