php_logo

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_register_shutdown_function_uml1.gif

<?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_register_shutdown_function_uml2.gif

<?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.