Articles

Le mois de la fonction PHP : coucher de script

  • Ecrit par Julien Pauli
  • jeudi 26 avril 2007
Image pour le titre du contenu

This document is also available in English en 


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&eacute;thode Exit de la classe initi&eacute;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 >

Vous devez vous connecter pour commenter