Position actuelle: Accueil> Derniers articles> Contrôlez le flux du cache de sortie en combinant ob_list_handlers et ob_end_flush

Contrôlez le flux du cache de sortie en combinant ob_list_handlers et ob_end_flush

gitbox 2025-05-29

Dans le développement de PHP, le mécanisme tampon de sortie (tampon de sortie) est une fonction très pratique. Il permet aux développeurs de stocker temporairement le contenu en mémoire avant de les sortir, ce qui leur donne une flexibilité pour contrôler lorsque les données sont réellement envoyées au navigateur. La mise en mémoire tampon de sortie est particulièrement critique lorsque vous traitez le rendu de modèle, la compression de pages ou le contrôle de sortie.

Cet article expliquera en détail comment utiliser la fonction ob_list_handlers () pour afficher l'état du tampon actuel et gérer avec précision le processus de sortie en combinaison avec ob_end_flush () .

1. Le principe de base de la tampon de sortie

La mise en mémoire tampon de sortie de PHP vous permet de «retarder» la sortie au client. Habituellement, lorsque vous utilisez des fonctions de sortie telles que l'écho , l'imprimé , la printf , etc., le contenu sera envoyé directement au client, mais si la mise en mémoire tampon est activée, le contenu sera temporairement enregistré dans un tampon jusqu'à ce que vous actualisiez activement ou terminez.

Certaines façons d'activer la tampon de sortie:

 ob_start(); // Allumez la mise en mémoire tampon par défaut

Vous pouvez également transmettre des fonctions de rappel ou activer GZIP et d'autres traitements spéciaux:

 ob_start('ob_gzhandler'); // Ouvrir gzip Tampon de compression

2. Utilisez ob_list_handlers () pour afficher l'état du tampon

La fonction ob_list_handlers () peut être utilisée pour afficher tous les processeurs de tampon de sortie actuellement ouverts (gestionnaires). Ceci est très utile lors du débogage des processus de sortie complexes.

Exemple de code:

 ob_start(); // Tampon par défaut
ob_start('ob_gzhandler'); // Deuxième couche de tampon,utiliser gzip

print_r(ob_list_handlers());

La sortie peut être:

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

Remarque: Cette liste est une "première entrée et sortie" (structure de pile), c'est-à-dire que le dernier tampon ouvert est traité en premier.

3. Contrôlez avec précision le processus de sortie avec ob_end_flush ()

ob_end_flush () est utilisé pour "mettre fin au tampon actuel et sortir le contenu". Il ne peut mettre fin au tampon le plus extérieur (c'est-à-dire le dernier qui est activé).

 ob_start(); // default buffer
ob_start('ob_gzhandler'); // gzip buffer

echo "Hello, Gitbox!";

// Afficher la pile de tampon actuelle
print_r(ob_list_handlers());

// Finition gzip Tampon et contenu de sortie
ob_end_flush();

// Afficher la mise en mémoire tampon restante
print_r(ob_list_handlers());

// 再Finition default Tampon et sortie
ob_end_flush();

Cette façon de nettoyer la couche tampon par couche garantit que le contenu est sorti dans l'ordre et le format attendus.

4. Scénarios d'application typiques

  1. Système de rendu de modèle

    • Utilisez la sortie du fragment du modèle de capture de tampon pour effectuer un remplacement ou un assemblage uniforme.

  2. Compression et mise en cache des pages

    • Utilisez OB_GZHandler pour implémenter la compression GZIP.

    • Ou le gestionnaire personnalisé, tel que la compensation des espaces supplémentaires ou des pauses de ligne.

  3. Ordre de sortie de débogage

    • Avec ob_list_handlers (), vous pouvez rapidement identifier si vous oubliez de désactiver une certaine couche de mise en mémoire tampon.

5. Exemple: Contrôle de sortie avec logique de compression personnalisée

 function compress_output($buffer) {
    // Compression simple:Retirez les pauses de ligne et les espaces supplémentaires
    $buffer = preg_replace('/\s+/', ' ', $buffer);
    return $buffer;
}

ob_start('compress_output');

echo "<html>\n";
echo "    <body> \n";
echo "        Welcome to Gitbox.net! \n";
echo "    </body>\n";
echo "</html>";

ob_end_flush();

La sortie sera comprimée en une seule ligne, adaptée à la génération de pages HTML légères.

6. Résumé

Via ob_list_handlers () , vous pouvez clairement afficher tous les processeurs tampons actuels pour un débogage et un contrôle faciles. À l'aide d' OB_END_FLUSH () , le contenu de sortie peut être libéré au besoin pour obtenir un contrôle de sortie plus précis et en couches. La combinaison de ces deux fonctions peut vous rendre plus à l'aise lorsque vous traitez avec une logique de sortie.

Qu'il s'agisse de construire votre propre moteur de modèle, d'effectuer une optimisation du référencement ou d'implémenter la compression et le cache de réponse, le contrôle tampon de sortie est un outil important qui vaut la maîtrise.