Im PHP -Ausgabemechanismus von PHP ist OB_LIST_HANDLERS () eine sehr praktische Funktion, die die aktuell aktivierten Ausgangspufferprozessoren auflistet. Dadurch können wir ein klares Verständnis dafür haben, welche Ausgangsprozessoren aktiv sind, wodurch das Ausgangsverhalten besser gesteuert wird, insbesondere beim Debuggen oder Bedarf der Ausgabe in den Zwischenstufen.
OB_LIST_HANDLERS () kann jedoch auch Ausgabefehler oder unerwartetes Verhalten in einigen Verwendungsszenarien werfen. Dieser Artikel behandelt diese gemeinsamen Fragen und bietet Möglichkeiten, diese zu vermeiden.
In PHP ermöglicht die Ausgangspufferung Entwicklern die Ausgabe von Skripten. Wenn Sie den Puffer aktivieren, speichert PHP alle Ausgaben im Speicher, anstatt ihn sofort an den Client zu senden. Sie können die folgenden Funktionen verwenden, um den Puffer zu bedienen:
ob_start () : Einschalten der Ausgangspufferung.
OB_Get_Contents () : Holen Sie sich den Inhalt im Puffer.
OB_END_CLEAN () : Löschen Sie den Puffer und schließen Sie ihn.
OB_LIST_HANDLERS () : Listet alle aktuellen Pufferprozessoren auf.
Obwohl OB_LIST_HANDLERS () selbst nichts direkt ausgibt, gibt es nur ein Array zurück. In der tatsächlichen Verwendung wird es häufig mit der Ausgangskontrolllogik gemischt, wodurch der folgende Fehler verursacht wird:
Wenn wir ob_end_clean () oder ob_end_flush () anrufen, muss der Puffer in der Reihenfolge des Pufferstacks geschlossen werden. Wenn Sie diese Funktionen nach Belieben aufrufen, ohne sich der Pufferebene sicher zu machen, ist es einfach, die Pufferstruktur zu brechen und zu einem "Ausgangsgesandten" -Fehler zu führen.
Beispiel Fehlerverbrauch:
ob_start();
echo "Inhalte verarbeiten";
$handlers = ob_list_handlers();
foreach ($handlers as $handler) {
ob_end_clean(); // Dies kann den falschen Puffer schließen
}
Richtige Möglichkeit, dies zu tun:
while (ob_get_level() > 0) {
ob_end_clean();
}
Überprüfen Sie alternativ einfach, ob ein bestimmter Prozessor existiert, und verarbeiten Sie es dann:
$handlers = ob_list_handlers();
if (in_array('default output handler', $handlers)) {
ob_end_clean();
}
Wenn der Puffer nicht ordnungsgemäß gelöscht oder geschlossen ist, wird der PHP der Ansicht, dass der Ausgang begonnen hat, was dazu führt, dass Sie beim Senden der Header -Nachricht auf den folgenden Fehler stoßen:
Warning: Cannot modify header information - headers already sent
Um solche Fehler zu vermeiden, stellen Sie sicher, dass alle Puffersteuervorgänge abgeschlossen sind, bevor eine Ausgabe erfolgt.
Beispielfix:
ob_start();
// Hier wurde kein tatsächlicher Inhalt ausgegeben,Sicherer Anruf header
header('Location: https://gitbox.net/dashboard');
ob_end_flush();
Einige Entwickler werden versuchen, den aktuellen Pufferstatus über OB_List_handlers () zum Debuggen auszugeben. Wenn jedoch der aktuelle Pufferkontext bei der Ausgabe nicht berücksichtigt wird, ist es einfach, den ursprünglichen Inhalt zu verschmutzen.
Nicht empfohlene Verwendung:
print_r(ob_list_handlers()); // Kann verursachen HTML Ausgabe verwirrend
Empfohlene Nutzung:
echo '<pre>';
print_r(ob_list_handlers());
echo '</pre>';
Oder melden Sie sich im Protokoll an:
error_log(print_r(ob_list_handlers(), true));
Um bei der Verwendung von OB_LIST_HANDLERS () Ausgabefehler zu vermeiden, werden folgende Punkte empfohlen:
Verwenden Sie diese Funktion nur während des Debuggens und vermeiden Sie es, die Ausgangspufferstruktur in Produktionsumgebungen freizulegen.
Beurteilen Sie immer die Pufferebene und stellen Sie sicher, dass Sie ob_get_level () verwenden, um den Puffer richtig zu schließen.
Vermeiden Sie die Verwendung von Header () , setCookie () und anderen Funktionen, wenn der Puffer nicht geschlossen ist.
Achten Sie bei der Ausgabe des Ergebniss von OB_LIST_HANDLERS () , achten Sie auf die Formatierung oder Schreiben in das Protokoll, anstatt das direkte Echo.
Unterscheiden Sie klar die Verantwortlichkeiten jeder Pufferschicht, um eine Kreuzinterferenz zu vermeiden.
OB_LIST_HANDLERS () ist ein wichtiges Instrument für das Debuggen von PHP -Ausgangspuffer, aber eine falsche Verwendung kann auch zu Ausgabefehlern führen. Das Verständnis des Arbeitsprinzips und die Kombination geeigneter Puffermanagementmethoden kann die Stabilität und Wartbarkeit von Anwendungen effektiv verbessern. Das Beherrschen der Details der Verwendung dieser Funktion ist ein notwendiger Schritt für jeden PHP -Entwickler, um auf die fortgeschrittene Ebene zu wechseln.
Soll ich OB_Start mehr Tipps hinzufügen?