PHP ob_end_clean() Funktion: Alles, was Sie wissen müssen
Als PHP-Entwickler müssen Sie den Ausgabepuffer leeren und die Ausgabepufferung deaktivieren. ob_end_clean() ist eine eingebaute PHP-Funktion, die dies ermöglicht.
Wenn PHP mit Ausgabepufferung läuft, wird alles, was Ihr Skript per echo ausgibt, in einem speicherinternen Puffer gesammelt, anstatt direkt an den Browser gesendet zu werden. Manchmal möchten Sie diese aufgezeichnete Ausgabe verwerfen und die Pufferung vollständig beenden — zum Beispiel nach dem Erfassen von Daten, die nur zur Inspektion dienen, oder wenn ein Fehler bedeutet, dass die halbfertige Antwort den Benutzer nie erreichen soll. Genau das macht ob_end_clean(). Diese Seite behandelt die Syntax, den Rückgabewert, gängige Anwendungsfälle und den Unterschied zu verwandten ob_*-Funktionen.
Was ist die ob_end_clean() Funktion?
ob_end_clean() führt zwei Aktionen in einem einzigen Aufruf am obersten (zuletzt gestarteten) Ausgabepuffer aus:
- Verwirft seinen aktuellen Inhalt — die gepufferte Ausgabe wird gelöscht, nicht gesendet.
- Deaktiviert diese Pufferungsebene — der Puffer wird geschlossen und vom Stapel entfernt.
Die Funktion existiert seit PHP 4. Der Name lässt sich als output buffer (ob) — end — clean entschlüsseln: „end" bedeutet die Pufferebene schließen, „clean" bedeutet den Inhalt verwerfen (im Gegensatz zu „flush", was ihn sendet).
Syntax
ob_end_clean(): boolDie Funktion nimmt keine Argumente entgegen und gibt einen boolean zurück.
Rückgabewert und Fehlerbehandlung
| Situation | Ergebnis |
|---|---|
| Ein Puffer war aktiv und wurde erfolgreich geschlossen | gibt true zurück |
| Kein aktiver Ausgabepuffer | gibt false zurück und erzeugt einen E_NOTICE |
| Der Puffer kann nicht gelöscht werden (z. B. Handler verbietet es) | gibt false zurück |
Da eine Warnung ausgegeben wird, wenn kein Puffer aktiv ist, sichern Sie den Aufruf mit ob_get_level() ab, wenn Sie nicht sicher sind, ob einer offen ist:
<?php
if (ob_get_level() > 0) {
ob_end_clean();
}
?>Einfaches Beispiel
<?php
ob_start(); // Start buffering
echo "This will be thrown away";
ob_end_clean(); // Discard the buffer, stop buffering
echo "Only this line reaches the browser";
?>Ausgabe:
Only this line reaches the browserDas erste echo erscheint nie: ob_end_clean() hat den Puffer gelöscht, der "This will be thrown away" enthielt.
Wann würde ich es verwenden?
- Unerwünschte Ausgabe unterdrücken von einer Funktion, Bibliothek oder Vorlage, die Sie nicht kontrollieren, damit sie die Antwort nicht beschädigen kann.
- Eine halbfertige Seite verwerfen, wenn ein Fehler oder eine Weiterleitung mittendrin auftritt, damit der Benutzer eine saubere Antwort erhält statt einer fehlerhaften.
- Ausgabe erfassen und verwerfen beim Testen oder Messen (zum Beispiel, um zu messen, wie lange ein Rendering dauert, ohne es tatsächlich auszugeben).
<?php
ob_start();
try {
render_complex_page(); // emits lots of output
throw new RuntimeException('boom');
} catch (Throwable $e) {
ob_end_clean(); // drop the partial page
http_response_code(500);
echo "Sorry, something went wrong.";
}
?>ob_end_clean() vs. verwandte Funktionen
Die ob_*-Familie gliedert sich in zwei Achsen — clean vs. flush (verwerfen vs. senden) und end vs. get (Puffer schließen vs. offen lassen / string zurückgeben):
| Funktion | Sendet den Puffer? | Schließt den Puffer? | Gibt den Inhalt zurück? |
|---|---|---|---|
ob_end_clean() | Nein | Ja | Nein |
ob_end_flush() | Ja | Ja | Nein |
ob_get_clean() | Nein | Ja | Ja (als string) |
ob_clean() | Nein | Nein (puffert weiter) | Nein |
Wenn Sie den verworfenen Text als string benötigen, verwenden Sie ob_get_clean() anstelle von ob_end_clean(). Um den Puffer zu senden statt zu verwerfen, nutzen Sie ob_end_flush(). Jede dieser Funktionen erfordert einen zuvor mit ob_start() geöffneten Puffer.
Verschachtelte Puffer
Ausgabepuffer bilden einen Stapel. ob_end_clean() betrifft nur den innersten Puffer; äußere Puffer bleiben unberührt. Jede Ebene benötigt ihren eigenen Aufruf zum Schließen:
<?php
ob_start(); // level 1
echo "outer ";
ob_start(); // level 2
echo "inner";
ob_end_clean(); // drops "inner", level 1 still open
echo " world";
ob_end_flush(); // sends "outer world"
?>Ausgabe:
outer worldFazit
ob_end_clean() verwirft den Inhalt des aktiven Ausgabepuffers und schließt diese Pufferungsebene, wobei true bei Erfolg zurückgegeben wird. Verwenden Sie es, um Ausgaben zu verwerfen, die Sie niemals senden möchten — und greifen Sie auf ob_get_clean(), ob_end_flush() oder ob_clean() zurück, wenn Sie stattdessen den Inhalt benötigen, ihn senden möchten oder die Pufferung fortsetzen wollen. Lesen Sie die Übersicht zur PHP-Ausgabesteuerung für das vollständige Bild.