Es ist ein sehr praktischer Mechanismus bei der Verwendung von PHP für die komplexe Ausgangskontrolle. Aber manchmal treffen wir zu viele verschachtelte Ausgangspuffer, was zu Ausnahmen oder Debugging -Schwierigkeiten führt. Zu diesem Zeitpunkt kann die Funktion OB_LIST_HANTLERS () Ihr Rechtshändler werden.
In diesem Artikel werden die Rolle und Verwendungsszenarien von OB_LIST_HANDLERS () ausführlich vorgestellt und wie man andere Ausgangspufferfunktionen für eine redundante hierarchische Reinigung kombiniert, um sicherzustellen, dass Ihre Ausgangslogik klar und stabil ist.
OB_LIST_HANDLERS () ist eine Funktion, die von PHP bereitgestellt wird, um eine Liste aller aktuell aktiven Ausgangspufferprozessoren zurückzugeben. Der Rückgabewert ist ein Array. Jedes Element repräsentiert den Namen eines Pufferprozessors (z. B. "Standardausgabe -Handler" , "mb_output_handler" , "ob_gzhandler" usw.).
array ob_list_handlers(void)
Es akzeptiert keine Parameter, gibt den Prozessornamen aller derzeit aktivierten Ausgabepuffer zurück.
In großen Anwendungen (insbesondere bei Verwendung von CMS oder Frameworks wie WordPress, Laravel) wird der Ausgangspuffer häufig in mehreren verschachtelten Ebenen eingeschaltet. Sobald die Seite leer ist oder die Ausgabe inkonsistent ist, ist es sehr problematisch, das Problem zu finden.
Mithilfe von OB_LIST_HANDLERS () können Sie schnell anzeigen, wie viele Ausgangspufferschichten derzeit verfügbar sind und wie der Prozessor für jede Ebene ist, um den Ausgangspuffer zu debuggen oder zu reinigen.
ob_start('ob_gzhandler');
ob_start();
$handlers = ob_list_handlers();
echo "Der aktuelle Ausgangspufferprozessor hat:" . count($handlers) . " Schicht<br>";
foreach ($handlers as $index => $handler) {
echo "1. " . ($index + 1) . " Schicht处理器:$handler<br>";
}
Ausgabe:
Der aktuelle Ausgangspufferprozessor hat:2 Schicht
1. 1 Schicht处理器:default output handler
1. 2 Schicht处理器:ob_gzhandler
Hinweis: Die Reihenfolge im Array erfolgt von der innersten Schicht bis zur äußersten Schicht , was bedeutet, dass der von OB_Start () aufgerufene Prozessor im Array zuerst eingestuft wird.
while (ob_get_level() > 0) {
ob_end_clean(); // Oder verwenden ob_end_flush() Senden Sie gepufferte Daten
}
Wenn Sie den Ausgangspuffer "zurücksetzen" möchten, stellt dieser Code sicher, dass es keine Legacy -Pufferschicht gibt.
Angenommen, Sie verwenden einen SDK von Drittanbietern und stellen fest, dass die Seite nie Inhalte ausgibt. Sie können den folgenden Debugging -Code einfügen:
echo "<pre>";
print_r(ob_list_handlers());
echo "</pre>";
Dann stellen Sie fest, dass die Ausgabe lautet:
Array
(
[0] => mb_output_handler
[1] => ob_gzhandler
[2] => default output handler
)
Dies zeigt an, dass der Ausgangspuffer durch mehrere Schichten verschachtelt ist, was möglicherweise eine bestimmte Schicht des Prozessors der Ausgabe abfängt. Zu diesem Zeitpunkt können Sie sich entscheiden, bestimmte Prozessoren angemessen zu bereinigen oder zu deaktivieren, z.
Verwenden Sie bei der Debuggierung der Ausgabenausnahmen unbedingt OB_LIST_HANDLERS () , um die aktuelle Pufferstruktur schnell zu verstehen.
Stellen Sie sicher, dass der Puffer vor dem Ende des Skripts ordnungsgemäß ordnungsgemäß oder reinig ist, um unerwartete Ausgabesverzögerungen zu vermeiden.
Vermeiden Sie es, zu viele Ob_Start () -Anrufe ohne klare Gründe zu verhindern.
Wenn Sie Header () verwenden, wenn Sie einen URL -Sprung ausführen und einen "bereits gesendeten" Headers -Fehler erhalten, liegt es wahrscheinlich daran, dass der Ausgangspuffer nicht verarbeitet wird:
ob_start();
// Andere Ausgabelogik
header("Location: https://gitbox.net/user/login");
ob_end_flush();
exit;
Diese Art von Problem kann vermieden werden, indem sichergestellt wird, dass der Puffer Inhalte nicht im Voraus ausgibt.
OB_LIST_HANDLERS () ist ein Gadget, das viele Entwickler ignorieren, aber es ist äußerst leistungsfähig, wenn die Ausgabepufferungsprobleme bei der Fehlerbehebung behoben werden. Durch das Beherrschen der Nutzung können Sie schnell Probleme in komplexen Projekten finden und die Debugging -Effizienz verbessern.
Wenn Sie das nächste Mal auf Ausgangsprobleme stoßen, vergessen Sie nicht, ob ob_list_handlers () zuerst eine Menge "versteckter" Wahrheiten zu finden.