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.