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