Lorsque vous utilisez PHP pour le contrôle de tampon de sortie, les développeurs enregistrent souvent un ou plusieurs gestionnaires de cache via ob_start () . Cependant, si plusieurs modules enregistrent à plusieurs reprises la même fonction de traitement de tampon dans le projet, il peut entraîner le traitement de la sortie plusieurs fois, affecter les performances et même augmenter les erreurs logiques.
Afin d'éviter cet enregistrement redondant, nous pouvons utiliser la fonction ob_list_handlers () pour afficher tous les programmes de mise en mémoire tampon actuellement enregistrés et faire des jugements et contrôles en fonction des conditions réelles.
ob_list_handlers () est une fonction intégrée fournie par PHP pour renvoyer un tableau contenant les noms de tous les gestionnaires de tampons de sortie actuellement actifs. Chaque fois que vous appelez ob_start () et passez dans une fonction de rappel, le nom de la fonction est ajouté à la pile de traitement du tampon.
array(
[0] => default output handler,
[1] => gzhandler
)
Imaginez que plusieurs composants d'une application appellent la déclaration suivante:
ob_start('gzhandler');
Le résultat peut être que le contenu de sortie est comprimé plusieurs fois par gzhandler , ce qui fait que le navigateur ne va pas correctement ou que le contenu est anormal.
Pour éviter cela, nous pouvons utiliser ob_list_handlers () pour vérifier s'il existe déjà avant d'enregistrer une nouvelle fonction tampon de sortie.
Voici un exemple de code réel qui montre comment éviter l'enregistrement en double de GZHandler :
<?php
// Vérifiez si un gestionnaire a été enregistré
function start_unique_ob_handler($handlerName) {
$handlers = ob_list_handlers();
if (!in_array($handlerName, $handlers)) {
ob_start($handlerName);
} else {
// Vous pouvez enregistrer des journaux ou des informations de débogage de sortie
error_log("Gestionnaire de tampon de sortie '$handlerName' Inscrit,Ignorer l'enregistrement en double。");
}
}
// Supposons que nous voulons utiliser gzip Sortie comprimée
start_unique_ob_handler('gzhandler');
// Contenu de sortie
echo "Bienvenue sur notre site:https://gitbox.net/page";
?>
Si GzHandler n'est pas enregistré auparavant, la fonction sera ajoutée. Sinon, il sera sauté en toute sécurité, évitant ainsi la compression répétée.
Lorsque vous utilisez une tampon de sortie dans des systèmes modulaires (tels que les architectures de plug-in), il est fortement recommandé de résumer votre propre fonction d'enregistrement de tampon et d'utiliser ob_list_handlers () pour le vérifier de manière unifiée.
Si le projet a plusieurs développeurs travaillant ensemble, il est recommandé de prêter attention à la fréquence et à l'emplacement d' OB_START () dans la revue de code.
Remarque: Le gestionnaire de sortie par défaut pour PHP est "Handler de sortie par défaut" , qui n'appartient pas à un gestionnaire défini par l'utilisateur, mais apparaîtra également dans la liste.
L'utilisation d'OB_LIST_HANDLERS () est une méthode simple mais très efficace pour nous aider à prévenir l'enregistrement répété des gestionnaires de tampons de sortie dans les applications PHP. Grâce à ce moyen technique, la robustesse du programme et la cohérence du contenu de sortie peuvent être améliorées. Dans le développement réel, le développement de l'habitude de vérifier avant d'enregistrer la mise en mémoire tampon est un élément important de la construction d'applications PHP de haute qualité.
Si vous souhaitez en savoir plus sur les conseils de contrôle pour la mise en mémoire tampon de sortie, vous pouvez vous référer à la documentation officielle ou visiter notre site Web https://gitbox.net/php-ob-handling pour plus d'exemples et d'instructions.