W3docs

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:

  1. Verwirft seinen aktuellen Inhalt — die gepufferte Ausgabe wird gelöscht, nicht gesendet.
  2. 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(): bool

Die Funktion nimmt keine Argumente entgegen und gibt einen boolean zurück.

Rückgabewert und Fehlerbehandlung

SituationErgebnis
Ein Puffer war aktiv und wurde erfolgreich geschlossengibt true zurück
Kein aktiver Ausgabepuffergibt 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 browser

Das 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):

FunktionSendet den Puffer?Schließt den Puffer?Gibt den Inhalt zurück?
ob_end_clean()NeinJaNein
ob_end_flush()JaJaNein
ob_get_clean()NeinJaJa (als string)
ob_clean()NeinNein (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  world

Fazit

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.

Übungen

Übung
Was macht die ob_end_clean() Funktion in PHP?
Was macht die ob_end_clean() Funktion in PHP?
Was this page helpful?