ob_list_handlers est une fonction de PHP qui est étroitement liée au mécanisme de tampon de sortie. Il est utilisé pour renvoyer toutes les fonctions de traitement de tampon de sortie enregistrées dans le script PHP actuel. Lorsque vous utilisez la tampon de sortie, il est important de comprendre l'utilisation correcte des ob_list_handlers . Cependant, en raison des détails de ses fonctions et de son utilisation, les développeurs font souvent des erreurs courantes lors d'une utilisation réelle.
Cet article analysera les abus communs d' OB_LIST_HANDLERS et donnera la méthode d'utilisation correcte pour aider les développeurs à éviter ces pièges courants.
OB_LIST_HANDLERS est une fonction intégrée en PHP pour obtenir toutes les fonctions de mise en mémoire tampon (gestionnaires) de sortie enregistrées dans le script PHP actuel. Ces fonctions de traitement traitent les données dans le tampon séquentiellement, et vous pouvez afficher la liste des fonctions de tampon dans le processus de traitement actuel.
La mise en mémoire tampon de sortie est une condition préalable au fonctionnement normal des fonctions de la série OB_ * . Si vous appelez ob_list_handlers sans que la tampon de sortie ne soit activé, un tableau vide sera retourné ou aucune sortie ne sera disponible.
Exemple d'erreur:
$handlers = ob_list_handlers(); // La mise en mémoire tampon de sortie n'est pas activée
print_r($handlers);
Ce code renverra un tableau vide après l'exécution, car aucune fonction tampon n'est enregistrée.
Utilisation correcte:
Tout d'abord, la tampon de sortie doit être démarrée via ob_start () :
ob_start(); // Démarrer la tampon de sortie
$handlers = ob_list_handlers();
print_r($handlers); // Imprimer la fonction de traitement du tampon de sortie actuel
De cette façon, ob_list_handlers () peut renvoyer la liste correcte des fonctions de traitement de tampon.
ob_list_handlers renvoie une liste des fonctions de traitement organisées en ordre d'enregistrement. Si le développeur pense à tort que le contenu de la liste peut être directement manipulé, une erreur peut se produire.
Exemple d'erreur:
$handlers = ob_list_handlers();
if (isset($handlers[0])) {
ob_end_clean($handlers[0]); // erreur:Essayez de nettoyer manuellement la fonction tampon
}
Cette utilisation est erronée car ob_list_handlers renvoie une liste de fonctions et ne fournit pas directement des autorisations opérationnelles au tampon. Vous devez utiliser ob_end_clean () ou d'autres fonctions connexes pour contrôler la mise en mémoire tampon de sortie, plutôt que de fonctionner directement sur la liste des fonctions.
Utilisation correcte:
ob_start(); // Démarrer la tampon de sortie
echo "Some output";
ob_end_clean(); // correct:Effacer et fermer le tampon actuel
PHP prend en charge la mise en mémoire tampon de sortie imbriquée, et les développeurs peuvent essayer par erreur d'effacer les fonctions de traitement qui ne sont pas au niveau du tampon actuel s'ils n'en sont pas conscients.
Exemple d'erreur:
ob_start();
ob_start(); // 嵌套Démarrer la tampon de sortie
$handlers = ob_list_handlers();
echo "Test Output";
ob_end_clean($handlers[0]); // erreur:Les fonctions de tampon ne doivent pas être exploitées directement
Cette pratique conduira à la croyance erronée du développeur que les fonctions de traitement de tampon de sortie imbriquées peuvent être directement manipulées, mais en fait, les tampons imbriqués doivent être effacés un par un dans l'ordre.
Utilisation correcte:
ob_start(); // Démarrer la tampon de sortie la plus externe
ob_start(); // Démarrez la tampon de sortie de la couche intérieure
echo "Inner Output";
ob_end_clean(); // Effacer le tampon intérieur
echo "Outer Output";
ob_end_clean(); // Effacer le tampon extérieur
Avant d'appeler ob_list_handlers () , assurez-vous de vous assurer que le tampon de sortie a été démarré. La mise en mémoire tampon peut être lancée par ob_start () ou d'autres fonctions connexes.
Après avoir obtenu la liste des fonctions de tampon, le tampon doit être utilisé au besoin. Habituellement, ob_end_clean () est utilisé pour effacer le contenu du tampon actuel et éteindre le tampon, ob_get_contents () est utilisé pour obtenir le contenu du tampon, et ob_list_handlers () est uniquement utilisé pour déboguer et afficher les fonctions de traitement du tampon.
Lorsque vous traitez avec des tampons imbriqués, veillez à effacer les tampons un par un pour vous assurer que chaque couche de tampons est fermée dans l'ordre.
J'ai oublié d'activer la tampon de sortie : sans appeler ob_start () , appelez OB_LIST_HANDLERS () directement et vous obtiendrez un tableau vide.
Fonctionnement direct de la liste des fonctions de tampon : ob_list_handlers () Renvoie une liste des fonctions de tampon et ne peut pas être utilisée directement pour les opérations de tampon.
Mauvaise ordonnance de compensation du tampon : les tampons imbriqués doivent être effacés un par un dans la hiérarchie plutôt que de sauter le tampon.
OB_LIST_HANDLERS est un outil utile pour déboguer et vérifier les tampons de sortie PHP, mais ce n'est pas une fonction qui gère directement les tampons. La bonne façon de l'utiliser devrait garantir que le tampon de sortie est démarré et que le contenu du tampon est effacé au besoin. Si vous ne faites pas attention à ces détails, il est facile de conduire à des erreurs inutiles.
J'espère que grâce à l'analyse de cet article, nous pouvons vous aider à éviter les erreurs courantes lors de l'utilisation d'OB_LIST_HANDLERS et de mieux comprendre le mécanisme de tampon de sortie de PHP.