Signatur
Beschreibung
ob_clean() verwirft den gesamten bislang im aktiven Ausgabepuffer angesammelten Inhalt, lässt den Puffer aber geöffnet und aktiv. Dies unterscheidet es von ob_end_clean(), das den Puffer zusätzlich schließt, und von ob_flush(), das den Inhalt ausgibt anstatt ihn zu verwerfen.
Typische Einsatzgebiete sind Situationen, in denen während der Verarbeitung festgestellt wird, dass der bisher generierte Output ungültig oder veraltet ist und durch neuen Inhalt ersetzt werden soll – zum Beispiel beim Auftreten eines Fehlers, nach dem statt der normalen Seite eine Fehlerseite ausgegeben werden soll.
Ein weiteres häufiges Muster ist das Kombinieren von ob_clean() mit Template-Engines oder Caching-Systemen: Der Puffer wird befüllt, der Inhalt wird zwischengespeichert, dann mit ob_clean() geleert und anschließend neu beschrieben – ohne den Puffer neu starten zu müssen.
Die Funktion gibt true zurück, wenn ein aktiver Puffer vorhanden und der Löschvorgang erfolgreich war. Ist kein Puffer aktiv, gibt sie false zurück und erzeugt eine Warnung.
Rückgabewert
true zurück, wenn der Pufferinhalt erfolgreich gelöscht wurde. Gibt false zurück, wenn kein aktiver Ausgabepuffer vorhanden ist; in diesem Fall wird zusätzlich eine PHP-Warnung ausgelöst.Beispiele
Pufferinhalt verwerfen und durch Fehlerseite ersetzen
<?php
ob_start();
echo '<html><body>';
echo '<h1>Willkommen auf meiner Seite</h1>';
$fehler = true; // Fehler tritt während der Verarbeitung auf
if ($fehler) {
ob_clean(); // Bisherigen Output verwerfen
echo '<html><body><h1>Ein Fehler ist aufgetreten!</h1></body></html>';
} else {
echo '</body></html>';
}
ob_end_flush();
Pufferinhalt für Caching sichern und Puffer zurücksetzen
<?php
ob_start();
echo 'Generierter Seiteninhalt: ' . date('H:i:s');
// Inhalt aus Puffer lesen und cachen
$gecachterInhalt = ob_get_contents();
file_put_contents('/tmp/page_cache.html', $gecachterInhalt);
// Puffer leeren, aber offen lassen für weiteren Output
ob_clean();
echo 'Seite wurde gecacht. Aktuell: ' . date('H:i:s');
ob_end_flush();
// Wichtig · Fallstricke
Warnung: Wenn kein Ausgabepuffer aktiv ist und ob_clean() aufgerufen wird, gibt die Funktion false zurück und PHP erzeugt eine E_NOTICE-Warnung. Es empfiehlt sich daher, vorher mit ob_get_level() zu prüfen, ob ein aktiver Puffer vorhanden ist.
Anders als ob_end_clean() schließt ob_clean() den Puffer nicht. Nach dem Aufruf kann weiterhin in den Puffer geschrieben werden. Soll der Puffer gleichzeitig gelöscht und geschlossen werden, ist ob_end_clean() die richtige Wahl.
Bei verschachtelten Puffern (mehrere ob_start()-Aufrufe) wirkt ob_clean() stets nur auf den innersten aktiven Puffer.