Gestion des connexions

Le statut des connexions est conserv� en interne par PHP. Il y a trois �tats possibles :

  • 0 - NORMAL (normal)
  • 1 - ABORTED (annul�)
  • 2 - TIMEOUT (p�rim�)

Lorsqu'un script PHP est en cours d'ex�cution, son �tat est NORMAL. Si le client distant se d�connecte, le statut devient ABORTED. En g�n�ral, une telle d�connexion provient d'un arr�t temporaire. Si la dur�e maximale d'ex�cution de PHP est d�pass�e, (voir set_time_limit()), le script prend le statut TIMEOUT.

Vous pouvez en outre d�cider si vous voulez que la d�connexion d'un client provoque l'arr�t de votre script. Il est parfois pratique que vos scripts continuent � s'ex�cuter jusqu'� la fin, m�me si le client n'est plus l� pour recevoir les informations. Cependant, par d�faut, le script s'arr�tera d�s que le client se d�connecte. Ce comportement peut �tre modifi� avec la directive ignore_user_abort dans le fichier php.ini ou bien avec la directive Apache php_value ignore_user_abort du fichier Apache httpd.conf ou avec la fonction ignore_user_abort(). Si vous ne demandez pas � PHP d'ignorer la d�connexion, et que l'utilisateur se d�connecte, le script sera termin�. La seule exception est si vous avez enregistr� une fonction de fermeture, avec register_shutdown_function(). Avec une telle fonction, lorsque l'utilisateur interrompt sa requ�te, � la prochaine ex�cution du script, PHP va s'apercevoir que le dernier script n'a pas �t� termin�, et il va d�clencher la fonction de fermeture. Cette fonction sera aussi appel�e � la fin du script, si celui-ci se termine normalement. Pour pouvoir avoir un comportement diff�rent suivant l'�tat du script lors de sa finalisation, vous pouvez ex�cutez des commandes sp�cifiques � la d�connexion gr�ce � la commande connection_aborted(). Cette fonction retournera TRUE si la connexion a �t� annul�e.

Votre script peut aussi �tre automatiquement interrompu apr�s une certaine dur�e. Par d�faut, le d�lai est de 30 secondes. Cette valeur peut �tre chang�e en utilisant la directive PHP max_execution_time dans le fichier php.ini ou avec la directive php_value max_execution_time, dans le fichier Apache httpd.conf ou encore avec la fonction set_time_limit(). Lorsque le d�lai expire, le script est termin�, et comme pour la d�connexion du client, une fonction de terminaison sera appel�e. Dans cette fonction, vous pouvez savoir si c'est le d�lai d'expiration qui a caus� la fin du script, en appelant la fonction connection_status(). Cette fonction retournera 2 si le d�lai d'expiration a �t� d�pass�.

Une chose � noter est que les deux cas ABORTED et TIMEOUT peuvent �tre appel�s en m�me temps. Ceci est possible si vous demandez � PHP d'ignorer les d�connexions des utilisateurs. PHP va quand m�me noter le fait que l'utilisateur s'est d�connect�, mais le script va continuer. Puis, lorsqu'il atteint la limite de temps, le script va expirer. � ce moment-l�, la fonction connection_status() retournera 3.