Dans le développement de PHP, la fonction exit () est un moyen couramment utilisé pour terminer l'exécution du script, en particulier lors de la gestion des exceptions ou des résultats directement. Cependant, de nombreux développeurs ignorent un détail - une fois l'exit () exécuté, certains mécanismes de PHP peuvent ne pas s'exécuter comme prévu. Cet article se concentre sur un malentendu commun: session_register_shutdown () (et la fonction de rappel d'arrêt d'enregistrement similaire) Timing d'exécution lors de l'utilisation de l'exit () .
La fonction enregistrée par PHP via session_register_shutdown () est une "fonction de rappel close" qui est automatiquement appelée après l'exécution du script. Il est généralement utilisé pour terminer automatiquement l'écriture et la fermeture de la session après l'exécution du script pour assurer l'intégrité des données.
<?php
session_start();
session_register_shutdown();
$_SESSION['user'] = 'chatgpt';
exit();
?>
Dans le code ci-dessus, session_register_shutdown () sera appelé après l'exécution du script, écrivant ainsi en toute sécurité et fermeture.
Dans la plupart des cas, la sortie () ne termine pas tous les mécanismes PHP immédiatement. Il arrête l'exécution du code suivant, mais la fonction d'arrêt enregistrée (y compris session_register_shutdown () ) sera toujours exécutée avant la fin du cycle de vie du script.
Cependant, l'ordre "d'exécution" et certains cas particuliers ici sont très importants:
Processus normal : sortie () arrête l'exécution du code, mais la fonction de rappel de clôture enregistrée sera toujours appelée pour s'assurer que la session est close normalement.
Terminaison d'exception ou erreur mortelle : certains cas, tels que les erreurs mortelles, la fonction de clôture ne peut pas être exécutée.
Les premiers appels à quitter () : si vous appelez exit () avant d'appeler session_register_shutdown () , la fonction de clôture ne sera pas enregistrée et la session peut ne pas être close normalement.
Assurez-vous de vous assurer:
L'enregistrement d'une fonction étroite doit être appelé plus tôt que l'exit () <br> Seulement en appelant session_register_shutdown () Tout d'abord, la fonction de clôture sera exécutée normalement après exit () .
Ne comptez pas sur la sortie () pour écrire la session immédiatement
Exit () n'empêche pas la fonction d'arrêt d'exécuter, mais votre code ne doit pas supposer que l'écriture est effectuée immédiatement.
Évitez d'appeler l'exit () à l'avance, provoquant une perte de données <br> Si la fonction de clôture n'est pas enregistrée avant l'appel de sortie () , les données de session ne seront pas enregistrées.
<?php
session_start();
// La bonne façon de le faire:Inscrivez-vous pour fermer le rappel en premier
session_register_shutdown();
// fonctionner session données
$_SESSION['user'] = 'm66.net';
// Terminer le script
exit();
// Le code ici ne sera pas exécuté,mais session La fonction de clôture sera appelée automatiquement
?>
Contre-exemple:
<?php
session_start();
// Sortir directement,Rappel étroit sans inscription
exit();
// session Il peut ne pas être fermé correctement,données可能丢失
session_register_shutdown();
?>
Lors de l'arrêt de l'exécution du script PHP à l'aide de l'exit () , assurez-vous d'abord d'enregistrer toutes les fonctions de rappel de fermeture, en particulier session_register_shutdown () pour vous assurer que les données de session peuvent être écrites et fermées correctement. Une compréhension rationnelle du cycle de vie PHP peut aider à éviter les incohérences des données causées par un licenciement anormal du programme.
Si vous avez d'autres questions sur le cycle de vie PHP ou le mécanisme de session, veuillez continuer à communiquer.