In PHP ist die Ausgangspufferung eine leistungsstarke Funktion, die das Ausgangsverhalten eines Skripts steuern kann. Die Ausgangspufferung ist besonders wichtig, insbesondere wenn dynamisch modifiziert, komprimiert, zwischenstrahlt oder das Ausgangsgehalt vorübergehend unterdrückt werden. Ob_list_handllers () und ob_clean () sind zwei sehr praktische Funktionen im Puffermanagement.
In diesem Artikel wird die Rolle von OB_LIST_HANTLERS () erläutert und Ob_Clean () kombiniert, um zu demonstrieren, wie genaue Steuerung und Reinigungspufferinhalt erreicht werden können.
Standardmäßig wird die Ausgabe des PHP -Skripts bei Ausführung direkt an den Browser gesendet. Durch das Einschalten der Ausgabepufferung (z. B. über OB_Start () ) speichert PHP den Ausgangsinhalt im Speicher vorübergehend, sodass eine weitere Verarbeitung vor dem Senden durchgeführt werden kann.
Zu den häufig verwendeten Pufferfunktionen gehören:
ob_start () : Öffnen Sie einen neuen Ausgangspuffer
ob_get_contents () : den Inhalt im Puffer abrufen
OB_END_CLEAN () : Löschen Sie den Puffer und schließen Sie den Puffer
ob_clean () : Löschen Sie den Puffer, aber schließen Sie den Puffer nicht
OB_LIST_HANDLERS () : Listen Sie den aktuell geöffneten Pufferprozessor auf
OB_LIST_HANDLERS () wird verwendet, um ein Array zurückzugeben, das alle aktuell geöffneten Ausgabepuffer und deren entsprechenden Prozessornamen enthält. Diese Funktion wird speziell zum Debuggen oder Beurteilung des Status des aktuellen Pufferstapels in komplexen Puffersteuerungsszenarien verwendet.
ob_start('ob_gzhandler'); // verwendengzipKompression
ob_start(); // Schalten Sie die Standardpufferung ein
print_r(ob_list_handlers());
Die Ausgabe kann sein:
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
Beachten Sie, dass die Reihenfolge dieses Arrays "zuerst in und out" (LIFO) ist, was bedeutet, dass sich der obere Puffer vor dem Array befindet.
ob_clean () löscht den Inhalt des aktuellen oberen Puffers, schließt den Puffer jedoch nicht. Dies ist entscheidend, um sicherzustellen, dass vor dem Senden von HTTP -Header -Informationen keine Ausgabe vorhanden ist.
Zum Beispiel:
ob_start();
echo "Vorübergehende Ausgabe";
ob_clean(); // Löschen Sie den Puffer“Vorübergehende Ausgabe”
Wenn Sie Ob_Clean () blind in einem Multi-Buffer-Szenario anrufen, kann es in den Inhalten gelöscht, der nicht gelöscht werden sollte, oder den Puffer des komprimierten/codierenden Prozessors löschen, was zu einem unerwarteten Ausgangsverhalten führt.
In komplexen Pufferszenarien, beispielsweise wenn Sie mehrere Prozessoren (Gzip -Komprimierung, benutzerdefinierte Rückrufe usw.) aktivieren, müssen Sie sicherstellen, dass der Kompressionsprozessor oder andere spezifische Schichten beim Reinigen des Puffers nicht beeinflusst werden . Zu diesem Zeitpunkt müssen Sie OB_LIST_HANDLERS () verwenden, um die aktuelle Pufferstapelstruktur zu bestimmen und zu entscheiden, ob sie ob_clean () oder ob_end_clean () aufgerufen werden sollen.
ob_start('ob_gzhandler'); // Kompression处理器
ob_start(); // Standardpufferschicht
echo "Bereiten Sie den Ausgangsinhalt vor";
// Holen Sie sich den aktuellen Pufferstapel
$handlers = ob_list_handlers();
// Wenn die oberste Schicht der Standardpuffer ist,Inhalt klar
if (!empty($handlers) && $handlers[0] === 'default output handler') {
ob_clean();
}
// Ausgabeinhalt
echo "Ausgang aufräumen";
// Schalten Sie die Pufferung nacheinander aus
while (ob_get_level() > 0) {
ob_end_flush();
}
Angenommen, Sie entwickeln eine API -Schnittstelle, die die Ausführung abbrechen muss, wenn der Benutzer nicht angemeldet ist, und gibt eine JSON -Fehlerantwort zurück. Einige Module haben jedoch möglicherweise versehentlich im Voraus ausgegeben. Zu diesem Zeitpunkt können Sie OB_Clean () und OB_List_handlers () kombinieren, um sicherzustellen, dass der Puffer gereinigt wird.
ob_start(); // Pufferung einschalten
// 某些模块可能提前Ausgabeinhalt
include 'some_module.php'; // Dieses Modul kann enthalten echo Stellungnahme
// Reinigen Sie die irrelevante Ausgabe
if (in_array('default output handler', ob_list_handlers())) {
ob_clean();
}
// Zurück zu StandardJSONAntwort
header('Content-Type: application/json');
echo json_encode([
'status' => 'error',
'message' => 'Bitte melden Sie sich zuerst beim System an。'
]);
ob_end_flush(); // Ausgabe senden
Dieser Schritt verhindert, dass die Struktur vor dem Senden von JSON korrumpiert wird, was dazu führt, dass der Client nicht normal auflöst.
OB_LIST_HANDLERS () ist ein leistungsstarkes Tool zum Beobachten und Debuggen für den Ausgangspufferzustand . Wenn Sie es in Kombination mit OB_Clean () verwenden, können Sie in komplexen Pufferstapeln einen Fehlclearing -Inhalt vermeiden und die Genauigkeit und Stabilität der Ausgangskontrolle verbessern.
Wenn es um die komprimierte Ausgabe, die verschachtelte Pufferung und die modulare Ausgabe geht, können Sie diese beiden Funktionen vernünftigerweise eine stabilere und kontrollierbare Ausgangsstrategie erstellen. Wenn Sie über ein API-System verfügen, das die Ausgabe von Inhalten beinhaltet oder SEO-freundliche statische Caching-Funktionen erfordern, wird dringend empfohlen, diese Art der Pufferkontrollstrategie einzuführen.