mar
30
mai '06
Durée d'une fonction de terminaison de script.
À 10:39 dans la rubrique PHP / PEAR
←
/ #235
/ rss
/ →
Je lisais un article dans le DirectionPHP d'avril 2006 sur la gestion des interruptions de script en php (Ce numéro est 'Gratuit', profitez en pour découvrir ce magazine.) quand je me suis posé une question.
Sachant que
Quand le dépassement de la limite indiquée par maximum_execution_time provoque l'arrêt du script, quel temps d'éxécution est permis pour les fonctions enregistrées par register_shutdown_function()
En effet
- si c'est "rien de plus", ces fonctions ne seront pas exécutées
- si c'est "la même chose", qu'advient-il si on redépasse le temps autorisé ?
- si c'est "no-limit", alors sur un hébergement protégé sur la durée d'éxécution et empèchant l'utilisation de set_time_limit(), on peut utiliser cette astuce pour des scripts de temps d'éxécution illimités.
Alors j'ai testé
<?php
register_shutdown_function('goToshut');
set_time_limit(10);
$fp = fopen('test.html','w+');
fwrite($fp,"<html><body>");
sleep(3);$line = __LINE__ . "<br />"; echo $line ; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; echo $line ; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; echo $line ; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; echo $line ; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; echo $line ; fwrite($fp,$line );flush();
exit();
function goToshut()
{
global $fp;
fwrite($fp,'goToshut');
sleep(3);$line = __LINE__ . "<br />"; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; fwrite($fp,$line );flush();
sleep(3);$line = __LINE__ . "<br />"; fwrite($fp,$line );flush();
fwrite($fp,'that\'s all folks');
fwrite($fp,"</body></html>");
fclose($fp);
}
?>
Et voilà ce que ca donne à l'écran
7
8
9
Fatal error: Maximum execution time of 10 seconds exceeded in c:\documents and settings\christophe gesché\mes documents\sources\cvs.claroline.net\test.php on line 10
Fatal error: Maximum execution time of 10 seconds exceeded in c:\documents and settings\christophe gesché\mes documents\sources\cvs.claroline.net\test.php on line 22
Donc la fonction du shutdown est ellement soumise au time out. Voici le contenu du fichier
7
8
9
goToshut19
20
21
Demain je vais essayer de mettre les register en cascade.








Commentaires
1. Le mardi 30 mai 2006 à 19:54, par Arnaud
Ajouter un commentaire