PHP ob_get_clean() Funktion: Alles, was Sie wissen müssen
Erfahren Sie, wie die PHP ob_get_clean() Funktion den Ausgabepuffer ausliest und die Ausgabepufferung in einem Schritt beendet.
Die Funktion ob_get_clean() erfasst alles, was PHP in den Ausgabepuffer geschrieben hat, gibt es als string zurück und schaltet den Puffer in einem Schritt ab. Sie ist der Standardweg, um generierte Ausgabe als Variable zu erfassen, anstatt sie direkt an den Browser zu senden — nützlich für Templating, das Cachen von gerenderten Fragmenten oder die Nachbearbeitung von HTML vor der Anzeige.
Diese Seite erklärt, was ob_get_clean() zurückgibt, wie es sich von verwandten Pufferfunktionen unterscheidet sowie die praktischen Muster und Fallstricke, auf die Sie beim Einsatz stoßen werden.
Was ob_get_clean() tut
Ausgabepufferung ermöglicht es PHP, Ausgaben (von echo, print, printf und sogar rohem HTML zwischen ?> und <?php) im Speicher zu sammeln, anstatt sie sofort zu senden. Sie aktivieren sie mit ob_start() und erfassen oder geben den gepufferten Inhalt später frei.
ob_get_clean() tut zwei Dinge auf einmal:
- Get — gibt den aktuellen Inhalt des obersten Ausgabepuffers als string zurück.
- Clean — verwirft diesen Puffer und schaltet ihn ab (entspricht
ob_get_contents()gefolgt vonob_end_clean()).
Da die Funktion den Puffer sowohl ausliest als auch entfernt, erreicht keine der erfassten Ausgaben den Browser, es sei denn, Sie geben sie selbst mit echo aus.
Syntax
ob_get_clean(): string|falseSie erwartet keine Argumente. Bei Erfolg gibt sie den Pufferinhalt als string zurück, oder false, wenn die Ausgabepufferung nicht aktiv ist (d. h. kein Puffer zum Auslesen vorhanden ist).
Einfaches Beispiel
<?php
ob_start(); // start buffering
echo "This will be buffered"; // captured, not printed
$output = ob_get_clean(); // grab it and stop buffering
echo strtoupper($output); // now we control the outputAusgabe:
THIS WILL BE BUFFEREDDie Zeile echo "This will be buffered" erreicht den Browser nie allein — sie wird im Puffer gespeichert, in $output zurückgegeben und erst dann angezeigt, nachdem wir sie mit strtoupper() transformiert haben.
Ein praktisches Beispiel: Ein gerendertes Template erfassen
Eine häufige reale Anwendung ist das Rendern einer Template-Datei zu einem string, um ihn zurückgeben, cachen oder per E-Mail versenden zu können:
<?php
function renderTemplate(string $file, array $data): string
{
extract($data); // turn array keys into local variables
ob_start();
include $file; // the template's HTML/echo output is buffered
return ob_get_clean(); // return it as a string
}
// Usage (assuming a greeting.php that echoes "Hello, $name!"):
// $html = renderTemplate('greeting.php', ['name' => 'Ada']);Hier kann die eingebundene Datei gewöhnliches HTML und <?= $name ?> Tags enthalten; ob_get_clean() wandelt das gesamte gerenderte Ergebnis in einen zurückgebbaren string um, anstatt es auszugeben.
ob_get_clean() vs. verwandte Funktionen
| Funktion | Gibt Inhalt zurück? | Beendet Pufferung? | Sendet an nächsten Puffer/Browser? |
|---|---|---|---|
ob_get_clean() | Ja | Ja | Nein (verworfen) |
ob_get_contents() | Ja | Nein | Nein (Puffer bleibt aktiv) |
ob_end_clean() | Nein | Ja | Nein (verworfen) |
ob_get_flush() | Ja | Ja | Ja (ausgegeben) |
Verwenden Sie ob_get_clean(), wenn Sie die erfasste Ausgabe und möchten, dass sie nicht automatisch irgendwohin gesendet wird.
Häufige Fallstricke
- Kein aktiver Puffer →
false. Der Aufruf vonob_get_clean()ohne ein passendesob_start()gibtfalsezurück und erzeugt einen Hinweis. Prüfen Sie mitob_get_level()oder stellen Sie sicher, dass die Pufferung aktiv ist. - Es betrifft nur den obersten Puffer. Puffer können verschachtelt sein. Wenn Sie
ob_start()zweimal aufgerufen haben, schließtob_get_clean()nur den innersten; der äußere Puffer bleibt aktiv. - Die Ausgabe ist nach dem Aufruf weg. Einmal geleert, ist der Puffer leer — rufen Sie die Funktion einmal auf und speichern Sie das Ergebnis in einer Variable, wenn Sie es mehr als einmal benötigen.
- Strikter Vergleich auf Leere. Ein leerer Puffer gibt
""zurück, nichtfalse. Verwenden Sie=== false, um „kein Puffer" von „Puffer war leer" zu unterscheiden.
Fazit
ob_get_clean() ist die bevorzugte Funktion, wenn Sie die gepufferte Ausgabe als string benötigen und die Pufferung danach abschalten möchten, ohne etwas an den Browser zu senden. Sie arbeitet natürlich mit ob_start() zusammen und ermöglicht Muster wie Template-Rendering und Ausgabe-Caching. Für die verwandten Operationen — den Puffer offen halten, ihn ausgeben oder einfach verwerfen — siehe ob_get_contents(), ob_get_flush() und ob_end_clean().