Magazine

La fonction register_shutdown_function sous PHP

Publié le 15 avril 2008 par Dave Lizotte
Rares sont les personnes qui connaissent la fonction register_shutdown_function, et pourtant, selon plusieurs, elle est très utile dans certains cas. En fait, elle permet de réaliser des traitements hors transaction HTTP. Mais qu'est-ce que cela veut dire ? Voici un exemple plus parlant :
  Le navigateur demande une page PHP au serveur Web. Celui-ci 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
  • Etc
Remarque : cette fonction ne fonctionne pas sous Windows.

Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

A propos de l’auteur


Dave Lizotte 57 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte