Articles
This document is also available in English
register_shutdown_function() enregistre une fonction pour execution à l'extinction. Elle est utile pour toute opération de nettoyage de l'environnement en fin de script, et on peut enregistrer autant de fonctions de fermeture que l'on désire. On peut aussi grace à create_function() executer plusieurs instructions en une seule passe :
Exemple 1 - Fermeture de plusieurs fichiers en une seule fois grace à create_function() :
<?php register_shutdown_function(create_function('', 'fclose($file1); fclose($file2); return true;')); ?><strong> </strong>
Exemple 2 - Destruction d'un fichier temporaire en fin de script :
<?php function cleanup() { global $tmpfile; if ($tmpfile) @unlink ($tmpfile); } function my_tempnam() { global $tmpfile; if (!$tmpfile) { $tmpfile = tempnam("/tmp", "tmpfile"); register_shutdown_function ("cleanup"); } return $tmpfile; } ?>
Exemple 3 - Fabrique d'objet avec enregistrement autommatique d'une méthode de fermeture :
<?php class MyClass { static private $callbackClassName = null; static public function init( $callbackClassName ) { if ( !class_exists( $callbackClassName ) ) { throw new Exception( $callbackClassName.' n\existe pas'); } self::$callbackClassName = $callbackClassName; register_shutdown_function( array( __CLASS__, 'shutdownCallbackHandler' ) ); } static public function reset() { /*...*/ } static public function cleanExit() { /*...*/ } static public function shutdownCallbackHandler() { call_user_func( array( self::$callbackClassName, 'Exit' ) ); // appel de la méthode Exit de la classe initiée via init() } } ?><strong> </strong>
A mémoriser
- Même si la connection est interrompue, ou si le script arrive à un timeout, les fonctions de fermetures sont tout de même executées
- Plusieurs fonctions peuvent être enregistrées, elles seront alors appelées dans l'ordre de leur enregistrement
- Les fonctions de fermeture sont appelées après la destruction des objets, et juste avant que PHP ne s'arrete.
| < Précédent | Suivant > |
|---|
Commentaires
|
Durée d'une fonction de terminaison de script.
Sachant que maximum_execution_time provoque l'arrêt du script après X secondes et que register_shutdown_function() permet de donner une fonction à exécuter en cas d'interruption de script. 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é
Envoyé par Gesché Christophe, [http://moosh.et.son.brol.be/blog/index.php/2006/05/30/235-] le jeudi 26 avril 2007 à 8:09
|
Vous devez vous connecter pour commenter


