In PHP ist die Funktion OB_List_handlers () ein sehr nützliches Tool, das eine Liste von Handlern für den aktuellen Ausgangspuffer zurückgibt. Mit dem Ausgangspuffermechanismus können wir den Ausgangsinhalt verarbeiten, bevor wir ihn an den Browser senden, z. B. Komprimieren, Zwischenspeichern oder Ändern des Inhalts. In einigen Fällen kann die Verwendung von OB_LIST_HANTLERS () jedoch zu einer ungenauen oder außergewöhnlichen Ausgangspufferliste führen. In diesem Artikel werden die möglichen Ursachen dieser Situation untersucht und Lösungen bereitgestellt.
Ausgangspuffer ist ein Mechanismus für die Verarbeitungsleistung in PHP. Wenn der Ausgangspuffer aktiviert ist, speichert PHP die Ausgangsdaten im Puffer, anstatt sie sofort an den Browser zu senden. Auf diese Weise können Entwickler die Daten ändern, bevor sie endlich ausgegeben werden. Häufige Ausgangspufferfunktionen sind:
ob_start () : Aktivieren Sie den Ausgangspuffer.
OB_END_FLUSH () : Schließt den Puffer und gibt den Inhalt aus.
ob_get_contents () : Holen Sie sich den Inhalt des Puffers.
Die Funktion OB_LIST_HANDLERS () ist eine integrierte Funktion in PHP, die die Handler-Liste des aktuellen Ausgangspuffers zurückgibt. Es kann Entwicklern helfen, zu sehen, welche Pufferhandler derzeit aktiviert sind. Zum Beispiel kann es einige Handler zum Komprimieren von Ausgang oder zur Protokollierung usw. geben.
// Beispiel:Zeigen Sie den aktuellen Ausgangspuffer -Handler an
print_r(ob_list_handlers());
Während die Funktion OB_LIST_HANTLERS () sehr nützlich ist, kann dies in einigen Fällen zu einer ungenauen oder außergewöhnlichen Liste der Ausgangspufferhandler führen. Hier sind einige mögliche Gründe:
Die von OB_LIST_HANDLERS () zurückgegebene Liste enthält nur den aktuell aktiven Ausgabebuffer -Handler. Wenn kein Ausgabepuffer aktiviert ist, gibt OB_LIST_HANDLERS () ein leeres Array zurück. In diesem Fall kann es nicht angeschlossen werden, dass der Ausgangspuffer nicht anerkannt ist, und es kann tatsächlich nur dann OB_END_CLEAN () oder OB_END_FLUSH () aufgerufen werden, um den Puffer zu löschen.
Mit PHP können mehrere Ausgangspuffer aktiviert werden. Dies bedeutet, dass jeder Puffer unterschiedliche Handler haben kann und zu unterschiedlichen Zeiten geschlossen und gelöscht werden kann. Wenn keine ordnungsgemäße Reihenfolge der Verwaltung von Ausgabepuffern oder mehreren Puffer nicht korrekt gereinigt werden, kann OB_LIST_HANDLERS () ungenaue Ergebnisse zurückgeben.
Die Funktion OB_Start () ermöglicht es Entwicklern, Pufferhandler anzugeben. Wenn mehrere Handler mit demselben Puffer angeschlossen sind, kann die Reihenfolge, in der OB_LIST_HANDLERS () zurückgegeben wird, Entwickler verwirren. Insbesondere beim Hinzufügen oder Entfernen von Handlern dynamisch kann das Verhalten des Puffers instabil werden.
In einigen Fällen werden Ob_Start () und andere Ausgabebufferfunktionen falsch aufgerufen. Es kann dazu führen, dass OB_List_handlers () ein Ausnahmeergebnis zurückgibt. Beispielsweise ist der Ausgangspuffer in verschiedenen Phasen der Skriptausführung aktiviert oder ausgeschaltet, wodurch die Funktion die aktuelle Liste der Handler nicht korrekt erkennt.
Stellen Sie zuerst sicher, dass der Ausgangspuffer aktiviert ist, bevor der Ausgangspuffer aktiviert ist. Sie können den Puffer starten, indem Sie Ob_Start () anrufen, um sicherzustellen, dass OB_List_handlers () die richtige Liste zurückgeben kann.
// Starten Sie den Ausgangspuffer
ob_start();
// Holen Sie sich den aktuellen Ausgangspuffer -Handler
print_r(ob_list_handlers());
Wenn Ihre Anwendung mehrere Ausgabepuffer verwendet, stellen Sie sicher, dass der Handler für jeden Puffer korrekt eingestellt ist, und schließen Sie den Puffer zum richtigen Zeitpunkt. Sie können OB_END_CLEAN () verwenden, um den aktuellen Puffer zu löschen oder obs_end_flush () auszugeben und den Puffer zu schließen.
Wenn Sie mehrere Pufferhandler verwenden, achten Sie auf ihre Bestellung. Sie können eine Rückruffunktion angeben, wenn Sie Ob_Start () aufrufen, um die korrekte Verwaltung des Puffers zu gewährleisten.
// Verwenden Sie Rückruffunktionen, um Ausgabepuffer zu verwalten
ob_start('my_callback_function');
Rufen Sie sicher, Funktionen wie Ob_Start () , OB_end_flush () und ob_end_clean () am richtigen Ort des Skripts. Eine falsche Anrufreihenfolge kann zu ungenauen Ausgangspuffer -Handler -Listen führen.
Nehmen wir an, Sie haben ein PHP -Skript und möchten den Status des Ausgabebufers debuggen. Sie können den folgenden Code verwenden:
// Aktivieren Sie den Ausgangspuffer
ob_start();
// Fügen Sie einen einfachen Handler hinzu
ob_start(function ($buffer) {
return str_replace('old', 'new', $buffer);
});
// Einige Inhalte ausgeben
echo "This is old text.";
// Holen Sie sich den gepufferten Ausgangsinhalt
$output = ob_get_contents();
// Holen Sie sich die aktuelle Liste der Pufferhandler
$handlers = ob_list_handlers();
// Schließen Sie den Puffer
ob_end_flush();
// Ausdruckinhalte und Handlerliste
echo $output;
print_r($handlers);
In diesem Beispiel haben wir Ob_Start () verwendet, um den Puffer zu aktivieren, und einen Handler hinzugefügt. Holen Sie sich die Handler -Liste der Puffer über OB_LIST_HANDLERS () .
Bei Verwendung der Funktion OB_LIST_HANTLERS () ist die Liste der Ausgabepuffer -Handler -Liste möglicherweise ungenau oder außergewöhnlich. Die Hauptgründe sind möglicherweise eine falsche Pufferaktivierung, eine unsachgemäße Verwaltung mehrerer Ausgabepuffer, die verwirrende Reihenfolge der Pufferhandler usw. Durch korrektes Verwalten des Status, der Reihenfolge der Ausgabepuffer und des Aufrufens des Timings können Sie diese Probleme vermeiden und eine Liste von Pufferhandlern genau erstellen.