Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction ob_list_handlers? Un article vous apprend à nettoyer les niveaux de cache de sortie redondants

Comment utiliser la fonction ob_list_handlers? Un article vous apprend à nettoyer les niveaux de cache de sortie redondants

gitbox 2025-05-28

C'est un mécanisme très pratique lors de l'utilisation de PHP pour un contrôle de sortie complexe. Mais parfois, nous rencontrons trop de tampons de sortie imbriqués, ce qui entraînera des exceptions de sortie ou des difficultés de débogage. À l'heure actuelle, la fonction ob_list_handlers () peut devenir votre main droit.

Cet article introduira en détail le rôle et les scénarios d'utilisation de ob_list_handlers () , ainsi que la façon de combiner d'autres fonctions de tampon de sortie pour le nettoyage hiérarchique redondant pour garantir que votre logique de sortie est claire et stable.

1. Qu'est-ce que ob_list_handlers () ?

ob_list_handlers () est une fonction fournie par PHP pour renvoyer une liste de tous les processeurs de tampon de sortie actuellement actifs. La valeur de retour est un tableau, chaque élément représente le nom d'un processeur de tampon (tel que "Handler de sortie par défaut" , "MB_Output_Handler" , "ob_gzhandler" , etc.).

Définition de la fonction:

 array ob_list_handlers(void)

Il n'accepte aucun paramètre, renvoie le nom du processeur de tous les tampons de sortie actuellement activés.

2. Pourquoi l'utiliser?

Dans les grandes applications (en particulier lorsque vous utilisez des CMS ou des frameworks tels que WordPress, Laravel), le tampon de sortie est souvent activé en plusieurs couches imbriquées. Une fois que la page est vide ou que la sortie est incohérente, il est très difficile de localiser le problème.

L'utilisation de ob_list_handlers () vous permet de visualiser rapidement le nombre de couches de tampons de sortie actuellement disponibles et quel est le processeur pour chaque couche, vous aidant à déboguer ou à nettoyer le tampon de sortie.

3. Exemple pratique: afficher et nettoyer les tampons de sortie en excès

Exemple 1: Répertoriez tous les processeurs tampons

 ob_start('ob_gzhandler');
ob_start();

$handlers = ob_list_handlers();

echo "Le processeur de tampon de sortie actuel a:" . count($handlers) . " couche<br>";
foreach ($handlers as $index => $handler) {
    echo "1 et 1 " . ($index + 1) . " couche处理器:$handler<br>";
}

Sortir:

 Le processeur de tampon de sortie actuel a:2 couche
1 et 1 1 couche处理器:default output handler
1 et 1 2 couche处理器:ob_gzhandler

Remarque: L'ordre dans le tableau est de la couche la plus intérieure à la couche la plus externe , ce qui signifie que le processeur appelé par ob_start () sera classé premier dans le tableau.

Exemple 2: Nettoyez tous les tampons de sortie

 while (ob_get_level() > 0) {
    ob_end_clean(); // Ou utiliser ob_end_flush() Envoyer des données tamponnées
}

Si vous souhaitez "réinitialiser" le tampon de sortie, ce code garantit qu'il n'y a pas de couche de tampon hérité.

4. Application pratique: débogage d'exceptions de sortie tierce

Supposons que vous utilisiez un SDK tiers et constatez que la page ne sort jamais de contenu. Vous pouvez insérer le code de débogage suivant:

 echo "<pre>";
print_r(ob_list_handlers());
echo "</pre>";

Ensuite, vous constatez que la sortie est:

 Array
(
    [0] => mb_output_handler
    [1] => ob_gzhandler
    [2] => default output handler
)

Cela indique que le tampon de sortie est imbriqué par plusieurs couches, ce qui peut être qu'une certaine couche de processeur a intercepté la sortie. À l'heure actuelle, vous pouvez choisir de nettoyer de manière appropriée ou de désactiver certains processeurs, tels que ne pas permettre à ob_gzhandler de voir s'il s'agit d'un problème causé par GZIP.

5. Suggestions de projet réelles

  • Lorsque vous déboguez les exceptions de sortie, assurez-vous d'utiliser ob_list_handlers () pour comprendre rapidement la structure tampon actuelle.

  • Assurez-vous que le tampon est à la chasse ou propre avant la fin du script pour éviter les retards de sortie inattendus.

  • Évitez de nicher trop d'appels ob_start () sans raisons claires.

6. Utilisé en conjonction avec une réécriture ou un saut d'URL

Si vous utilisez en-tête () lors de l'exécution d'un saut d'URL et recevez une erreur "en-têtes déjà envoyée", il est probable que c'est parce que le tampon de sortie n'est pas traité:

 ob_start();
// Autre logique de sortie

header("Location: https://gitbox.net/user/login");
ob_end_flush();
exit;

Ce type de problème peut être évité en s'assurant que le tampon ne représente pas le contenu à l'avance.

Résumer

ob_list_handlers () est un gadget que de nombreux développeurs ignorent, mais il est extrêmement puissant lors du dépannage des problèmes de mise en mémoire tampon de sortie. La maîtrise de son utilisation vous permettra de localiser rapidement des problèmes dans des projets complexes et d'améliorer l'efficacité du débogage.

La prochaine fois que vous rencontrerez des problèmes de sortie, n'oubliez pas de jeter un œil à ob_list_handlers () , vous trouverez beaucoup de vérités "cachées".