Chapitre 20. Gestion des connexions

Les informations suivantes ne sont valables qu ' à partir de la version 3.0.7 .

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



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 de terminer le script , même si le client n ' est plus pour recevoir les informations . Cependant , par défaut , le script sera interrompu , et terminé 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 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 expirer après un laps de temps . 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 php3_max_execution_time , dans le fichier Apache .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 finalisation 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_timeout( ) . Cette fonction retournera vrai 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 . A ce moment-là , les deux fonctions connection_timeout( ) et connection_aborted( ) vont retourner TRUE . Vous pouvez aussi vérifier les deux états en un seul appel avec la fonction connection_status( ) . Cette fonction va retourner un champs de bits , avec les états . Si les deux états sont actifs , l ' état retourné prendra la valeur 3 .