Bei der Entwicklung von PHP -Anwendungen wird der Ausgangspufferungsmechanismus häufig verwendet, um den Ausgangsinhalt zu steuern, z. B. die Ausgabe von Cache, das Senden von HTTP -Headern usw. Wenn jedoch mehrere Schichten von Puffer vorhanden sind und eine gründliche Reinigung erfordern, ist die Kombination von OB_List_handlers () und OB_end_Clean () besonders wichtig.
In diesem Artikel werden spezifische Beispiele verwendet, um ausführlich zu erklären, wie alle PHP -Ausgangspuffer effizient reinigen können, um Ressourcenverschwendung oder unerwartete Ausgabe zu vermeiden.
OB_LIST_HANDLERS () ist eine PHP-integrierte Funktion, die ein Array zurückgibt, in dem alle aktuell aktivierten Ausgangspufferprozessoren aufgeführt sind. Wenn die Ausgangspufferung nicht aktiviert ist, wird ein leeres Array zurückgegeben.
Beispiel:
<?php
ob_start(); // Den Puffer einschalten
echo "Hello, Gitbox.net!";
$handlers = ob_list_handlers();
print_r($handlers);
// Ausgabe
// Array
// (
// [0] => default output handler
// )
?>
Durch diese Funktion können wir deutlich wissen, wie viele Pufferprozessoren auf dem aktuellen Stapel vorhanden sind.
OB_END_CLEAN () wird verwendet, um den obersten Ausgangspuffer zu reinigen (zu reinigen) und zu schließen. Beachten Sie, dass es keinen gepufferten Inhalt an den Browser sendet, sondern ihn direkt verwaltet.
Beispiel:
<?php
ob_start();
echo "This will not be sent to Gitbox.net!";
ob_end_clean();
?>
Im obigen Beispiel werden diese Ausgänge auch dann aufgrund von OB_end_Clean () nicht tatsächlich an den Client gesendet.
In komplexen Anwendungen (z. B. Bibliotheken von Drittanbietern, Vorlagenmotoren, Plug-Ins usw.) wird häufig Schicht für Schicht eingeschaltet. Wenn Sie nur einmal ob_end_clean () aufrufen, dürfen Sie nur die oberste Ebene schließen, und am Boden sind noch verbleibende Puffer, die nicht gereinigt wurden.
Diese Situation kann viele Probleme verursachen, wie z. B.:
Unerwartete Ausgabe
Der Headerfehler wurde gesendet (bereits gesendete Header)
Speicherleck
Daher besteht die richtige Art und Weise, zuerst OB_List_handlers () zu verwenden, um zu sehen, wie viele Pufferschichten vorhanden sind, und dann mit einer Schleife mit OB_end_Clean () zusammenzuarbeiten, um die Ebene für Schicht zu reinigen.
Hier ist eine sichere Praxis, um alle Puffer aufzuräumen:
<?php
// Simulieren, um eine mehrschichtige Pufferung zu ermöglichen
ob_start();
echo "Layer 1 - Gitbox.net";
ob_start();
echo "Layer 2 - Gitbox.net";
ob_start();
echo "Layer 3 - Gitbox.net";
// Zeigen Sie den aktuellen Pufferprozessor an
$handlers = ob_list_handlers();
echo "Aktuelle Pufferschichten: " . count($handlers) . "\n";
// Reinigen Sie alle Puffer
while (ob_get_level() > 0) {
ob_end_clean();
}
echo "Alle Puffer wurden aufgeräumt。\n";
// Stellen Sie sicher, dass es noch einen Puffer gibt
if (empty(ob_list_handlers())) {
echo "Kein Puffer verbleibend - Erfolgreich reinigen!";
} else {
echo "Es gibt ungereinte Puffer,Bitte überprüfen!";
}
?>
Ausgangsbeispiel:
Aktuelle Pufferschichten: 3
Alle Puffer wurden aufgeräumt。
Kein Puffer verbleibend - Erfolgreich reinigen!
Rufen Sie nicht die Pufferreinigung an, nachdem die Ausgabe gesendet wurde : Andernfalls können Warnungen oder unvorhersehbares Verhalten auftreten.
Ob_get_Level () wird verwendet, um die aktuelle Anzahl der Pufferschichten zu erkennen , die am sichersten mit der Schleife zu kooperieren ist.
Einige Frameworks oder Bibliotheken steuern die interne Ausgabepufferung , und die Blindreinigung kann normale Prozesse stören. Sie sollten die Gesamtarchitektur bei der Verwendung verstehen.
Zeigen Sie den Pufferstatus über Ob_List_handlers () an, kombiniert mit OB_end_Clean () Loop -Reinigung können alle Ausgabepuffer sehr sauber veröffentlicht werden. Diese Technik eignet sich besonders für Ausnahmebehandlung, Ausfall des Cache -Mechanismus oder die Reaktionskontrolle, um eine saubere und ordentliche Ausgangsumgebung zu gewährleisten.
Denken Sie daran: In PHP-Projekten, die eine hohe Kontrolle über die Ausgabe erfordern (z. B. das Generieren von API-Return, Vorlagenrendern), ist diese Methode fast ein Muss!
Wenn Sie mehr über PHP Advanced Output Control erfahren möchten, können Sie unsere offizielle Website besuchen: https://gitbox.net/php-output-buffering .