W3docs

PHP ob_clean() Funktion: Alles, was Sie wissen müssen

Die PHP-Funktion ob_clean() löscht den Inhalt des aktuellen Ausgabepuffers, ohne die Pufferung zu beenden. Syntax, Beispiele und häufige Fehler.

Die PHP-Funktion ob_clean() verwirft alles, was in den aktuellen Ausgabepuffer geschrieben wurde, ohne die Pufferung zu beenden. Sie wird verwendet, wenn das Skript bereits Ausgabe erzeugt hat, diese Ausgabe aber fehlerhaft ist (z. B. ein übrig gebliebenes Debug-var_dump, ein halb gerendertes Template oder eine Fehlermeldung), und Sie sie verwerfen und weiter neue Inhalte erzeugen möchten.

Diese Seite erklärt, was ob_clean() tut, zeigt die Signatur und den Rückgabewert, beschreibt häufige Fallstricke (insbesondere den Unterschied zu ob_end_clean()) und stellt praktische Einsatzmuster vor.

Was Ausgabepufferung ist

Normalerweise sendet PHP die Ausgabe sofort an den Client, sobald Sie echo aufrufen. Ausgabepufferung ändert das: Nachdem Sie ob_start() aufgerufen haben, wird alles, was Sie ausgeben, in einem In-Memory-Puffer gespeichert, anstatt sofort gesendet zu werden. Nichts verlässt PHP, bis Sie den Puffer leeren oder das Skript endet.

Diese Verzögerung macht die Pufferung nützlich – solange sich die Ausgabe im Puffer befindet, können Sie noch:

  • HTTP-Header senden oder ändern (header(), setcookie()), selbst nach dem Ausgeben von Text,
  • die erfasste Ausgabe inspizieren, umschreiben oder verwerfen,
  • die gesamte Antwort komprimieren, bevor sie gesendet wird.

ob_clean() ist die „Verwerfen"-Operation in dieser Liste.

Syntax

ob_clean(): bool
  • Parameter: keine.
  • Rückgabewert: true bei Erfolg, false bei Fehler. Ein Fehler tritt auf (mit einem Hinweis/einer Warnung), wenn kein aktiver Ausgabepuffer zum Leeren vorhanden ist.

Ein einfaches Beispiel

<?php
ob_start();                       // start buffering

echo "This text is buffered.\n";
ob_clean();                       // throw the buffered text away

echo "Only this line is shown.\n";

ob_end_flush();                   // send remaining buffer to output

Ausgabe:

Only this line is shown.

Das erste echo wurde in den Puffer geschrieben, ob_clean() hat ihn geleert, und nur das zweite echo blieb erhalten. Beachten Sie, dass die Pufferung nach ob_clean() weiterhin aktiv ist – deshalb ist das abschließende ob_end_flush() nötig, um die zweite Zeile tatsächlich auszugeben.

Ein praxisnaher Anwendungsfall: einen fehlerhaften Render verwerfen

ob_clean() ist besonders nützlich, wenn Sie die Ausgabe optimistisch erzeugen und dann auf eine Bedingung stoßen, die sie ungültig macht:

<?php
function renderUser(?array $user): string
{
    ob_start();

    echo "<div class='card'>";
    echo "  <h2>" . ($user['name'] ?? '') . "</h2>";

    if (empty($user)) {
        ob_clean();                       // scrap the half-built card
        echo "<p>User not found.</p>";    // start fresh
        return ob_get_clean();
    }

    echo "</div>";
    return ob_get_clean();
}

echo renderUser(null);            // <p>User not found.</p>
echo "\n";
echo renderUser(['name' => 'Ann']);

Ausgabe:

<p>User not found.</p>
<div class='card'>  <h2>Ann</h2></div>

Hier gibt ob_get_clean() den Pufferinhalt zurück und beendet die Pufferung in einem Schritt, während ob_clean() mitten im Render verwendet wird, um das teilweise aufgebaute Markup zu verwerfen.

ob_clean() im Vergleich zu verwandten Funktionen

Die Ausgabesteuerungs-Familie hat vier ähnlich klingende Namen. Die zwei Dimensionen sind: Werden die Daten zurückgegeben? und Bleibt der Puffer offen?

FunktionGibt Daten zurück?Puffer bleibt offen?Sendet Daten an Client?
ob_clean()nein (verwirft)janein
ob_end_clean()nein (verwirft)neinnein
ob_get_clean()janeinnein
ob_flush()neinjaja (sendet, verwirft nicht)

Ein häufiger Fehler ist, ob_end_clean() zu verwenden, wenn ob_clean() gemeint war: Ersteres schließt die Pufferebene, sodass ein späteres echo nicht mehr gepuffert wird und nachfolgende ob_*-Aufrufe warnen können, dass kein Puffer aktiv ist.

Fallstricke

  • Pufferung muss aktiv sein. ob_clean() ohne vorangehendes ob_start() gibt false zurück und erzeugt einen Hinweis. Prüfen Sie mit ob_get_level(), falls Sie unsicher sind: if (ob_get_level() > 0) { ob_clean(); }.
  • Es wird nur der oberste Puffer geleert. Puffer können verschachtelt sein. ob_clean() wirkt auf den innersten (zuletzt gestarteten) Puffer, nicht auf alle.
  • Header werden nicht zurückgesetzt. ob_clean() leert nur den Ausgabetext; bereits mit header() gesetzte Header sind davon unberührt.

Fazit

ob_clean() verwirft den Inhalt des aktuellen Ausgabepuffers, lässt die Pufferung dabei aber aktiv, und ist damit das richtige Werkzeug, wenn Sie bereits erzeugte Ausgabe verwerfen und mit einem leeren Zustand weiterarbeiten möchten. Denken Sie an den Unterschied zu ob_end_clean() (das auch den Puffer schließt) und zu ob_get_clean() (das den Inhalt an Sie zurückgibt). Einen Überblick über die gesamte Familie finden Sie unter PHP Output Control.

Übungen

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