En PHP, le mécanisme de tampon de sortie fournit aux développeurs des capacités de contrôle de sortie flexibles, tandis que la fonction ob_end_flush () est une fonction commune utilisée pour mettre fin à la tampon de sortie et envoyer le contenu tamponné au navigateur. Dans le même temps, session_register_shutdown () est utilisée pour enregistrer une fonction de rappel, qui est automatiquement exécutée lorsque la session est fermée, afin que nous puissions gérer la sauvegarde et le nettoyage des données de session.
Cet article introduira en détail comment coopérer raisonnablement avec la fonction session_register_shutdown () lors de l'utilisation ob_end_flush () pour assurer l'intégrité des données de session et la sortie correcte du contenu de la page.
ob_end_flush () est utilisé pour fermer le tampon de sortie actuel et envoyer le contenu dans le tampon au navigateur. Par exemple:
<?php
ob_start();
echo "Ceci est une sortie tamponnée。";
ob_end_flush(); // Envoyer du contenu tamponné et fermer le tampon
?>
Utilisez un tampon pour enregistrer temporairement la sortie de la page, nous permettant de modifier ou de capturer le contenu de sortie avant la sortie.
Session_register_shutdown () est utilisé pour enregistrer une fonction de rappel appelée lorsque la session est fermée. Cette fonction de rappel sera automatiquement exécutée lors de l'exécution du script et que la session est fermée. Il est généralement utilisé pour gérer l'écriture et le nettoyage des sessions.
À partir de PHP 5.4.0, session_register_shutdown () sera appelé automatiquement sans avoir à l'appeler manuellement. Cependant, l'enregistrement manuel est toujours utile dans certaines anciennes versions ou des besoins spéciaux.
Exemple d'inscription:
<?php
session_register_shutdown(function() {
// Actions effectuées lorsque la session est fermée
file_put_contents('session_log.txt', "Session closed at " . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
});
?>
Par défaut, PHP appelle automatiquement session_write_close () à la fin du script pour enregistrer les données de session. Cependant, si le tampon de sortie est utilisé et ob_end_flush () est appelé pour envoyer la sortie à l'avance, il peut entraîner le démarrage des données de session avant qu'elle ne soit écrite, entraînant une perte de données ou un statut incohérent.
Dans le même temps, session_register_shutdown () nous permet de faire des opérations personnalisées lorsque la session est fermée pour assurer l'intégrité des données de session.
Voici une démonstration de la façon de l'utiliser raisonnablement:
<?php
session_start();
// Rappel lors de l'enregistrement d'une session est fermé,Assurez-vous que la session est écrite correctement
session_register_shutdown(function() {
// Vous pouvez mettre une logique de fermeture de session personnalisée ici
error_log("Session is closing at " . date('Y-m-d H:i:s'));
});
// Allumez la tampon de sortie
ob_start();
echo "Le contenu de la page commence à sortir。<br>";
// Traitement de la logique commerciale,Peut être modifié session données
$_SESSION['last_access'] = time();
// Terminer la tampon de sortie et envoyer le contenu
ob_end_flush();
?>
Dans cet exemple, session_register_shutdown () garantit que la logique lorsque la session est fermée sera appelée; tandis que ob_end_flush () garantit que le contenu de la page est envoyé en temps opportun sans affecter la rédaction de la session.
Assurez-vous que Session_Start () est appelé avant toute sortie.
La fonction de rappel de session_register_shutdown () ne peut pas dépendre de l'état du tampon de sortie.
Si vous devez modifier les données de session, il est recommandé de les compléter avant d'appeler ob_end_flush () .
Dans PHP 7 et ultérieurement, session_register_shutdown () ne nécessite généralement pas un appel manuel car PHP le gérera automatiquement.
La combinaison raisonnable de ob_end_flush () et de session_register_shutdown () peut aider les développeurs à mieux contrôler l'ordre de rédaction de données de sortie et de session et d'éviter la perte de données de session ou l'anomalie d'état en raison de l'extrémité précoce du tampon de sortie.
Grâce aux exemples et instructions ci-dessus, je pense que vous avez maîtrisé l'utilisation collaborative des deux et que vous pouvez maintenir la sécurité de la session et la stabilité de la sortie de la page dans des projets PHP complexes.