Signatur
Beschreibung
ob_end_flush() beendet den aktuell aktiven Ausgabepuffer, indem es dessen Inhalt zunächst an den übergeordneten Puffer oder direkt an den Browser sendet und den Puffer danach schließt. Es kombiniert also die Wirkung von ob_flush() und ob_end_clean() in einem einzigen Aufruf.
Diese Funktion wird typischerweise am Ende eines Skripts oder eines Codeabschnitts verwendet, in dem zuvor mit ob_start() ein Ausgabepuffer geöffnet wurde. Sie ist besonders nützlich, wenn der gepufferte Inhalt tatsächlich ausgegeben werden soll – etwa nach einer abschließenden Bearbeitung des erzeugten HTML-Codes.
Bei verschachtelten Ausgabepuffern schließt ob_end_flush() nur den zuletzt geöffneten (innersten) Puffer. Der gesendete Inhalt landet dann im nächstäußeren Puffer, sofern vorhanden, ansonsten direkt in der Ausgabe. Mehrere verschachtelte Puffer erfordern daher mehrere Aufrufe.
Wenn kein aktiver Ausgabepuffer vorhanden ist, gibt die Funktion false zurück und erzeugt eine Warnung. Es empfiehlt sich daher, vorher mit ob_get_level() zu prüfen, ob ein Puffer aktiv ist, oder den Rückgabewert entsprechend zu behandeln.
Rückgabewert
true zurück, wenn der Puffer erfolgreich geleert und geschlossen wurde. Gibt false zurück, wenn kein aktiver Ausgabepuffer vorhanden ist oder ein Fehler aufgetreten ist.Beispiele
Einfache Nutzung mit ob_start
<?php
ob_start();
echo "Hallo, dies ist gepufferter Inhalt.\n";
echo "Noch eine Zeile.\n";
// Puffer-Inhalt senden und Puffer schließen
ob_end_flush();
echo "Diese Zeile wird direkt ausgegeben (kein Puffer mehr aktiv).\n";
Ausgabepuffer mit Inhaltsprüfung und sicherem Schließen
<?php
ob_start();
echo "<h1>Seitentitel</h1>\n";
echo "<p>Inhalt der Seite</p>\n";
// Gepufferten Inhalt nachbearbeiten
$inhalt = ob_get_contents();
$inhalt = str_replace('Seitentitel', 'Geänderter Titel', $inhalt);
// Puffer leeren (verwerfen), dann modifizierten Inhalt ausgeben
ob_end_clean();
echo $inhalt;
// Separates Beispiel: sicher prüfen, ob ein Puffer aktiv ist
ob_start();
echo "Test\n";
if (ob_get_level() > 0) {
ob_end_flush(); // sicher aufrufen
}
Verschachtelte Ausgabepuffer leeren
<?php
ob_start(); // Äußerer Puffer
echo "Äußerer Inhalt\n";
ob_start(); // Innerer Puffer
echo "Innerer Inhalt\n";
ob_end_flush(); // Inneren Puffer senden -> geht in äußeren Puffer
echo "Nach innerem Flush\n";
ob_end_flush(); // Äußeren Puffer senden -> geht an den Browser
// Wichtig · Fallstricke
Achtung bei fehlenden Puffern: Wird ob_end_flush() aufgerufen, obwohl kein Ausgabepuffer aktiv ist, gibt die Funktion false zurück und löst eine E_NOTICE-Warnung aus. Prüfe daher mit ob_get_level() > 0, ob ein Puffer vorhanden ist.
Unterschied zu ob_flush(): ob_flush() sendet den Inhalt des Puffers, lässt den Puffer aber geöffnet. ob_end_flush() sendet den Inhalt und schließt den Puffer dauerhaft.
Ausgabe-Handler: Falls beim ob_start()-Aufruf ein Callback als Ausgabe-Handler angegeben wurde, wird dieser vor dem Senden des Inhalts aufgerufen und kann den Inhalt noch verändern (z. B. komprimieren mit ob_gzhandler).
Header-Probleme: Da der gepufferte Inhalt erst bei ob_end_flush() tatsächlich gesendet wird, können HTTP-Header noch bis zu diesem Zeitpunkt gesetzt werden – ein häufiger Grund für den Einsatz von Ausgabepufferung.