Détercter un execution time out

Résolu
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 13 nov. 2007 à 14:33
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 !
@+

4 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
13 nov. 2007 à 15:12
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') )
3
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
13 nov. 2007 à 15:57
    yes c'est ce que j'ai fait !
... lol ah la bidouille ;) ;)
merci
@+
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 nov. 2007 à 19:53
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.
:-)
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
14 nov. 2007 à 15:00
    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
0
Rejoignez-nous