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

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

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

1. Le , 17:08 par Olivier
06c790e1f8526e1f5e7a33a8b85783a9

Excellent ! et je ne connaissais pas.

merci bcp

2. Le , 20:14 par Moosh
b69a3bfc7f3bbba97f96d5011e745a0e

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

  1. maximum_execution_time provoque l'arrêt du script après X secondes.
  2. register_shutdown_function() permet de donner une fonction à exécuter en cas d'interruption de script.

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

3. Le , 14:55 par Cédric
579a2756b2da862a7ee5bcb806444ef7

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.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.