Gestion des connexions
Le statut des connexions est conservé en interne par PHP. Il y a quatre états possibles :
- 0 - NORMAL (normal)
- 1 - ABORTED (annulé)
- 2 - TIMEOUT (périmé)
- 3 - ABORTED and TIMEOUT (annulé et 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.
Version en cache
21/11/2024 18:18:04 Cette version de la page est en cache (à la date du 21/11/2024 18:18:04) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-features.connection-handling.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.