Bei der Ausgabesteuerung von PHP sind OB_LIST_HANDLERS () und OB_FLUSH () zwei sehr praktische Funktionen. Obwohl diese beiden Funktionen in ihrer eigenen Verwendung nicht komplex sind, kann die Kombination mit der Strategie der Cache -Reinigung einen effizienten und kontrollierbaren Puffermanagementmechanismus erzeugen, der insbesondere für den Bau von Anwendungen mit Zwischenschicht -Cache oder Streaming -Ausgangseigenschaften geeignet ist.
In diesem Artikel wird die Nutzungsszenarien von OB_List_handlers () im Detail analysiert und tatsächliche Beispiele verwendet, um zu veranschaulichen, wie sie mit OB_FLUSH () verwendet werden, um mehr detaillierteres Cache -Management zu erzielen.
Mit PHP -Ausgangspufferungsmechanismus können Entwickler Inhalte in einem Speicherpuffer speichern, bevor Sie ihn ausgeben. Durch diesen Mechanismus können wir:
Dynamisch den Ausgabeinhalt während der Seitenausführung ändern;
Vermeiden Sie die vom Header gesendeten Fehler;
Implementieren Sie die Zwischenverarbeitungslogik wie Inhaltskomprimierung und Zwischenspeicherung.
Zu den Funktionen für die Ausgabepufferung gehören:
OB_Start () : Schalten Sie den Puffer ein;
ob_get_contents () : den aktuellen Puffer -Inhalt abrufen;
ob_flush () : den Pufferinhalt an den Client aktualisieren (senden);
ob_end_clean () : den Puffer löschen und schließen;
OB_LIST_HANDLERS () : Alle aktuellen Pufferprozessoren anzeigen.
OB_LIST_HANDLERS () gibt ein Array zurück, das alle im aktuellen Ausgangspuffer registrierten Prozessoren repräsentiert. Wenn beispielsweise die GZIP -Komprimierung aktiviert ist, wird Folgendes zurückgegeben:
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
Diese Funktion ist sehr geeignet, um den gepufferten Zustand in komplexen Umgebungen zu debuggen. Beispielsweise können einige Frameworks oder Plug-Ins den Pufferprozessor automatisch registrieren und ein abnormales Ausgangsverhalten verursachen, und diese Funktion kann verwendet werden, um das Problem schnell zu lokalisieren.
ob_start('ob_gzhandler');
ob_start();
print_r(ob_list_handlers());
// Ausgabe:Array ( [0] => ob_gzhandler [1] => default output handler )
ob_flush () sendet den Inhalt des aktuellen Puffers an den Client, schließt den Puffer jedoch nicht. Häufig zur Streaming -Ausgabe verwendet, wie z. B. große Datenverarbeitung oder lange Umfragen.
ob_start();
for ($i = 1; $i <= 5; $i++) {
echo "Processing chunk $i\n";
ob_flush(); // 立即Ausgabe
flush(); // Zwingen Sie den Browser, Daten zu empfangen
sleep(1); // Zeitaufwändige Simulationsverarbeitung
}
In diesem Beispiel wird jedes verarbeitete Datenstück einmal ausgegeben, sodass Front-End-Benutzer "Echtzeit" -Feedback fühlen können.
In der tatsächlichen Entwicklung können die Kombination von OB_LIST_HANTLERS () und OB_FLUSH () einen "bedingten Aktualisierungsmechanismus" implementieren:
Verwenden Sie OB_LIST_HANDLERS (), um den aktuellen Buffer -Stapel -Status zu bestimmen.
Entscheiden Sie, ob OB_FLUSH () oder OB_END_FLUSH () für die Ausgabe oder Reinigung von Inhalten verwendet werden soll.
Angenommen, Sie möchten Aktualisierungen überspringen, wenn einige spezifische Ausgangsprozessoren vorhanden sind, um eine doppelte Komprimierung oder Codierungsfehler im Inhalt zu vermeiden.
ob_start('ob_gzhandler');
ob_start();
$content = "Willkommen zu Besuch https://gitbox.net/api/info \n";
echo $content;
$handlers = ob_list_handlers();
if (!in_array('ob_gzhandler', $handlers)) {
ob_flush();
flush();
} else {
// gzipVerarbeitung,Verzögerte Aktualisierung
error_log('verwenden ob_gzhandler,延迟Ausgabe。');
}
Diese Logik bestimmt automatisch, ob OB_GZHandler existiert, und wenn sie existiert, wird die Ausgabe verzögert, wodurch Codierungsprobleme vermieden werden.
Sie können auch eine Funktion zusammenschließen, um alle aktiven Puffer zu löschen:
function clear_all_buffers() {
while (ob_get_level() > 0) {
ob_end_clean();
}
}
Diese Methode ist besonders nützlich in der Ausnahmebehandlung und vermeiden, dass Fehlermeldungen durch Puffer verdeckt werden.
In Hochleistungs-PHP-Anwendungen, insbesondere wenn es um Inhaltskomprimierung, asynchroner Ausgang oder Streaming geht, wird es entscheidend, die Ausgangspufferung effektiv zu verwalten. OB_LIST_HANDLERS () liefert eine Visual Puffer Processor View, während OB_FLUSH () eine sofortige Steuerung über das Ausgabemittel bietet.
Durch vernünftige Kombination und logisches Urteilsvermögen kann es erreicht werden:
Flexiblere Caching -Strategien;
weniger Ressourcenverschwendung;
Weitere steuerbare Seitenausgabeverhalten.