Astuce PHP : La fonction register_shutdown_function

Rares sont les personnes qui connaissent la fonction register_shutdown_function, et pourtant, elle est très utile.
http://fr2.php.net/register_shutdown_function
Elle permet de réaliser des traitements hors transaction HTTP.
Voici un exemple plus parlant :
Le navigateur demande une page PHP au serveur Web, celui réalise l'appel à deux fonctions PHP pour produire la page demandée par le navigateur.
- La fonction 1 finit son traitement en 100 ms
- La fonction 2 finit son traitement en 200 ms

<?php
function fonction1()
{
// TODO
}
function fonction2()
{
// TODO
}
fonction1();
fonction2();
?>
La page sera alors délivrée au client en 300 ms.
Voici un exemple d'utilisation de la fonction register_shutdown_function :
- La fonction 1 finit son traitement en 100 ms
- La page est retournée au client
- La fonction 2 finit son traitement en 200 ms après que la page ait été retournée au client.

<?php
function fonction1()
{
// TODO
}
function fonction2()
{
// TODO
}
register_shutdown_function("fonction2");
fonction1();
?>
La page sera alors délivrée au client en 100 ms.
L'avantage de cette fonction est de pouvoir exécuter un traitement lorsque le script PHP s'arrête suite à un exit() ou un die(). Ceci permet d'éviter de faire attendre un client sur des traitements qui n'auront aucun effet sur le résultat de sa demande.
Cette fonction est donc très utile pour :
- La suppression de ressources temporaires
- La fermeture de socket ou de connexion à la base.
- Le logging
Remarque : cette fonction ne fonctionne pas sous Windows.





Commentaires
Excellent ! et je ne connaissais pas.
merci bcp
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()
la suite : http://moosh.et.son.brol.be/blog/in...
Sauf que sur la doc je peux lire "Depuis PHP 4.1, les fonctions d'extinction sont appelées comme une partie de la requête", et on peut même renvoyer du HTML à partir d'une fonction d'extinction, donc ce ne serait plus si vrai qu'avant la version 4.1.