Start · Sprachen · PHP · Referenz · ob_end_flush

ob_end_flush

Funktion

Sendet den Inhalt des aktiven Ausgabepuffers an den Browser und deaktiviert anschließend diesen Puffer.

seit PHP 4.0.0 Kategorie: io

Signatur

ob_end_flush(): bool

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

Typ
bool
Beschreibung
Gibt 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";
Hallo, dies ist gepufferter Inhalt. Noch eine Zeile. Diese Zeile wird direkt ausgegeben (kein Puffer mehr aktiv).

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
}
<h1>Geänderter Titel</h1> <p>Inhalt der Seite</p> Test

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
Äußerer Inhalt Innerer Inhalt Nach innerem Flush

// 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.