In PHP ist die Ausgangspufferung eine sehr praktische Funktion, mit der Entwickler das Timing und die Reihenfolge der Skriptausgabe steuern können. Standardmäßig wird die Ausgabe von PHP sofort an den Client gesendet. Durch das Einschalten der Ausgabepufferung können wir diese Ausgänge zuerst im Serverspeicher speichern und dann nach Bedarf verarbeiten oder senden.
Beim Umgang mit komplexer Cache-Steuerung oder Multi-Layer-Pufferlogik ist es entscheidend, die Verwendung der Funktion OB_List_handlers () zu verstehen und zu beherrschen. In diesem Artikel werden Beispiele kombiniert, um zu erklären, wie die Funktion OB_LIST_HANTLERS () verwendet wird, um die Ausgabepuffer fein zu verwalten, insbesondere wenn mehrere Ausgaberprozessoren (z. B. GZIP -Komprimierung, Vorlagenverarbeitung, benutzerdefinierte Cache) überlagert sind.
OB_LIST_HANDLERS () ist eine Funktion, die den Namen aller aktuell aktivierten Ausgangspufferprozessoren erhält. Sein Rückgabewert ist ein Array, das alle aktuellen Pufferprozessoren in Stack -Reihenfolge auflistet (zuletzt zuerst).
array ob_list_handlers ( void )
Der Ausgangspuffer existiert in PHP als Stapelstruktur. Jedes Mal, wenn Ob_Start () aufgerufen wird, wird ein neuer Prozessor an die Oberseite des Stapels hinzugefügt, und die Daten werden von der oberen Ebene zur unteren Ebene verarbeitet.
Das heisst:
Jede Prozessorschicht kann ändern, was sie empfängt.
Der niedrigste Pufferinhalt wird schließlich an den Client oder ein anderes Ziel gesendet.
Zum Beispiel:
ob_start('strtoupper'); // Der dritte Stock:Inhalt in Kapital umwandeln
ob_start('trim'); // Der zweite Stock:Entfernen Sie den Beginn und die Rohlinge
ob_start(); // Der erste Stock:Originalinhalt
Zu diesem Zeitpunkt gibt OB_LIST_HANDLERS () den folgenden Inhalt zurück:
Array
(
[0] => default output handler
[1] => trim
[2] => strtoupper
)
Angenommen, Sie entwickeln ein Seiten -Cache -System, das die GZIP -Komprimierung, die HTML -Komprimierung und die benutzerdefinierte Protokollierung kombiniert. Möglicherweise verwenden Sie die folgende Pufferkette:
ob_start('ob_gzhandler'); // Schicht1:GZIPKompression
ob_start('custom_html_minify'); // Schicht2:HTMLKompression
ob_start('log_output'); // Schicht3:Protokollierung
Um diese Prozessoren während des Debuggens oder des Laufens anzupassen, können wir OB_LIST_HANDLERS () verwenden, um die Struktur des Pufferstapels zu bestimmen und dann eine Verarbeitungslogik dynamisch zu schließen, zu ändern oder anzupassen.
$handlers = ob_list_handlers();
foreach ($handlers as $handler) {
if ($handler === 'log_output') {
ob_end_flush(); // oder ob_end_clean(),Hängt von den Geschäftsbedürfnissen ab
}
}
Dadurch wird vermieden, dass Protokollinhalte ausgegeben oder die Protokollierung unter bestimmten Bedingungen deaktiviert werden.
Im Folgenden ist ein Beispiel näher am tatsächlichen Szenario und simuliert den Ausgangspufferungsprozess eines statischen Cache -Seitensystems:
// Page -Cache -Logik
function cache_page_output($buffer) {
$cache_file = '/tmp/page_' . md5($_SERVER['REQUEST_URI']) . '.html';
file_put_contents($cache_file, $buffer);
return $buffer;
}
// 注册输出缓冲Schicht
ob_start('ob_gzhandler'); // GZIPKompression
ob_start('cache_page_output'); // Cache zur Datei
ob_start(); // Originalausgabe
echo "<html><body>Willkommen zu Besuch <a href=\"https://gitbox.net/\">GitBox</a></body></html>";
// Zeigen Sie den aktuellen Pufferprozessor an
print_r(ob_list_handlers());
Die Ausgabe ist ähnlich:
Array
(
[0] => default output handler
[1] => cache_page_output
[2] => ob_gzhandler
)
Zu diesem Zeitpunkt können wir nach Bedarf eine bestimmte Pufferebene beenden, z. B. vorübergehend über das Überspringen des Cache:
if ($_GET['nocache'] ?? false) {
ob_end_flush(); // Beenden cache_page_output 这一Schicht
}
Verstehen Sie den Puffermechanismus immer in der Reihenfolge der Stapel - der letzte Prozessor, der eingeschaltet wird, ist der erste, der die Daten verarbeitet.
Die Verwendung von OB_LIST_HANDLERS () kann beim Debuggen der Pufferschicht von großer Hilfe sein.
Um alle Puffer vollständig zu reinigen, können Sie die (ob_get_level ()) oB_end_flush () verwenden; .
Vergessen Sie nicht, dass alle Ausgabepuffer manuell flush () oder end_flush () sein müssen, andernfalls wird der Inhalt möglicherweise nicht gesendet, bevor das Skript endet.
In komplexen Cache -Steuerungsszenarien bietet OB_LIST_HANDLERS () die PHP -Ausgangspufferschicht visuell, sodass Entwickler das Verhalten jeder Ebene flexibel verwalten können. Das Kombinieren von Funktionen wie Ob_Start () und ob_end_flush () kann mehrschichtige Ausgangsketten für Komprimierung, Zwischenspeichern, Protokollierung, Filterung usw. realisieren und damit eine flexible und steuerbare Ausgangsstrategie erstellen.
Durch die Verwendung des Ausgabemechanismus und des OB_LIST_HANDLERS () können Sie effizientere, debuggierbare und erweiterbare PHP-Anwendungen erstellen, insbesondere beim Erstellen von Strukturen auf Middleware-basierten.