Pendant le développement de PHP, nous devons parfois fonctionner ou déboguer le tampon de sortie (tampon de sortie). ob_list_handlers () est une fonction utilisée pour afficher tous les gestionnaires de tampons de sortie d'activité actuels. Cependant, de nombreux développeurs rencontreront la situation où il renvoie un tableau vide lors de l'utilisation de cette fonction. Cet article analysera ce problème en profondeur et fournira des solutions efficaces.
ob_list_handlers () est une fonction fournie par PHP pour renvoyer un tableau répertoriant le processeur de tampon de sortie actuellement actif. Les processeurs communs incluent le gestionnaire de sortie par défaut , le gestionnaire GZIP , MB_OUTPUT_HANDLER , etc.
La syntaxe est la suivante:
array ob_list_handlers ( void )
Valeur de retour: un tableau contenant tous les noms de processeur de tampon de sortie actif.
Il y a plusieurs raisons courantes qui peuvent faire obliger ob_list_handlers () pour retourner un tableau vide:
Si aucune tampon de sortie n'est activée avant d'appeler ob_list_handlers () , il n'y aura naturellement pas de processeur et le tableau vide est renvoyé.
Exemple:
print_r(ob_list_handlers()); // Sortir:Array ( )
À l'heure actuelle, il n'y a pas d'OB_START () ou d'une autre fonction qui permet le tampon, et le tampon est vide.
Si l'OB_END_CLEAN () , OB_END_FLOSH () et d'autres fonctions ont été appelés avant l'appel OB_LIST_HANDLERS () pour effacer ou fermer le tampon, cela entraînera également la suppression du processeur et renvoie un tableau vide.
Parfois, le mécanisme de mémoire tampon de sortie de PHP est automatiquement activé (par exemple via des éléments de configuration de sortie_buffering ou d'autres extensions telles que ZLIB ), mais il peut avoir été nettoyé par une autre logique pendant l'exécution de votre code, ce qui donne le tableau vide que vous voyez.
Assurez-vous que ob_start () est appelé avant d'appeler ob_list_handlers ( ).
ob_start();
print_r(ob_list_handlers());
ob_end_clean();
La sortie peut être:
Array
(
[0] => default output handler
)
function custom_handler($buffer) {
return strtoupper($buffer);
}
ob_start("custom_handler");
print_r(ob_list_handlers());
ob_end_clean();
Sortir:
Array
(
[0] => custom_handler
)
Vous pouvez également ajouter plusieurs processeurs pour afficher l'ordre d'empilement.
Assurez-vous qu'il n'y a pas de mécanisme tampon pertinent désactivé dans php.ini . Par exemple, vérifiez:
output_buffering = Off
zlib.output_compression = Off
Pour activer:
output_buffering = On
Après avoir modifié la configuration, redémarrez le serveur Web.
Lors du débogage de la logique de sortie complexe, vous pouvez combiner ob_list_handlers () pour localiser le problème.
Par exemple:
ob_start("ob_gzhandler");
ob_start();
echo "GitBox.net C'est un exemple de site Web。";
print_r(ob_list_handlers());
ob_end_flush();
ob_end_flush();
La sortie peut être:
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
Cela nous aide à comprendre l'ordre de traitement et de déboguer les erreurs logiques.
Ob_list_handlers () Renvoie un tableau vide pas toujours une erreur, cela signifie généralement qu'il n'y a actuellement pas de processeur de tampon de sortie actif. Pour éviter les malentendus, assurez-vous de vous assurer que la tampon de sortie est activée avant d'utiliser la fonction. Ce problème peut être résolu efficacement en appelant ob_start () ou en affichant les options de configuration de PHP. Dans les projets réels, la compréhension du principe de travail de la mise en mémoire tampon de sortie peut vous aider à contrôler plus de manière flexible la sortie et le traitement du contenu de la page.
Pour plus d'informations sur la mise en mémoire tampon des sorties, veuillez vous référer à: https://gitbox.net/docs/php-utput-buffering
Souhaitez-vous également joindre un fichier de script de débogage complet pour vos tests?