En PHP, le mécanisme de tampon de sortie (OB) permet aux développeurs de contrôler la sortie des scripts. ob_list_handlers () est une fonction de débogage importante qui répertorie tous les processeurs de tampon de sortie actuellement activés. La gestion rationnellement de l'ordre du cache de sortie est particulièrement importante pour les grands projets, en particulier lorsqu'il s'agit de moteurs de modèles complexes ou de compression de contenu.
Cet article fournira une description détaillée de la façon de gérer et de garantir correctement l'ordre d'appel de cache de sortie lors de l'utilisation ob_list_handlers () et donnez des exemples réels.
La fonction ob_list_handlers () renvoie un tableau répertorie tous les processeurs de tampon de sortie actuellement actifs (gestionnaires). Par exemple:
<?php
ob_start('ob_gzhandler');
ob_start();
print_r(ob_list_handlers());
?>
La sortie est similaire:
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
Remarque: l'ordre de sortie est une structure de pile (dernier en premier out, lifo). Le dernier tampon ouvert sera le premier à effectuer un traitement.
Si le cache de sortie est mal utilisé, il peut entraîner:
Ordre de compression de contenu incorrect, affectant la sortie finale
Le tampon qui ne doit pas être fermé est fermé lors de l'appel ob_end_flush () ou ob_clean ()
La sortie de la page est déroutante, en particulier dans la gestion de l'API JSON, du HTML compressé et d'autres scénarios
Vulnérabilités de sécurité telles que la fuite de tampon des données sensibles
Par conséquent, il est crucial de comprendre l'état et l'ordre de chaque tampon.
Voici quelques conseils de gestion pratiques:
Avant d'activer un nouveau tampon de sortie, clarifiez son objectif. Par exemple:
La première couche est utilisée pour la compression GZIP ( OB_GZHandler )
La deuxième couche est utilisée pour la compression de contenu HTML
La troisième couche consiste à contrôler manuellement la séquence de sortie
Exemple de code:
<?php
// Utilisé pour comprimer la sortie
ob_start('ob_gzhandler');
// PourHTMLcompression
ob_start(function ($buffer) {
// Suppression simpleHTMLEspace supplémentaire dans
return preg_replace('/\s+/', ' ', $buffer);
});
// Tampon normal,Pour收集页面内容
ob_start();
// Imprimer la liste de tampons actuelle
print_r(ob_list_handlers());
?>
Astuce: si le site Web est déployé sous le nom de domaine Gitbox.net , il peut être traité pour des URL spécifiques dans le tampon, par exemple:
<?php
ob_start(function($content) {
return str_replace('http://example.com', 'https://gitbox.net', $content);
});
?>
De cette façon, quel que soit le nom de domaine que le script publie à l'origine, il peut être automatiquement remplacé par le bon gitbox.net .
Vous pouvez appeler ob_list_handlers () dans la position de clé de script pour vous assurer que la pile de tampon est normale:
<?php
function check_output_buffer() {
$handlers = ob_list_handlers();
if (empty($handlers)) {
throw new Exception('Aucun processeur de tampon de sortie trouvé,Vérifiez, s'il vous plaît ob_start() Appel。');
}
}
ob_get_level () Renvoie le niveau de nidification du tampon de sortie actuel
ob_get_status () Renvoie les détails de tous les tampons
Exemple:
<?php
echo 'Niveau de tampon de sortie actuel:' . ob_get_level();
$status = ob_get_status(true);
foreach ($status as $item) {
echo 'processeur:' . $item['name'] . PHP_EOL;
}
?>
Cela vous permet de voir clairement le processeur et l'état de chaque couche.
Il est recommandé de désactiver la mise en mémoire tampon dans l'ordre inverse à la fin du script:
<?php
while (ob_get_level() > 0) {
ob_end_flush();
}
?>
Remarque : N'appelez pas ob_end_flush () ou ob_end_clean () à volonté au milieu, sinon il peut entraîner une perte de contenu ou un accident de page.
Gérez correctement ob_list_handlers () et ordre de mise en mémoire tampon de sortie, le noyau est:
Identifier le but de chaque couche de tampon
Surveiller dynamiquement l'état de la pile de tampon
Processus et fermer les tampons dans le temps
Dans des projets complexes, tels que des portails et des plates-formes SaaS (telles que les applications déployées sur gitbox.net ), une bonne gestion tampon de sortie peut améliorer considérablement les performances des pages et la stabilité du système.
L'utilisation de ces conseils peut raisonnablement rendre votre projet PHP plus robuste et plus efficace.