Start · Sprachen · PHP · Referenz · ob_get_flush

ob_get_flush

Funktion

Sendet den Inhalt des aktuellen Ausgabepuffers an den Browser, gibt ihn als String zurück und deaktiviert den Puffer.

seit PHP 4.3.0 Kategorie: io

Signatur

ob_get_flush(): string|false

Beschreibung

ob_get_flush() kombiniert die Aktionen von ob_get_contents(), ob_end_flush() in einem einzigen Aufruf: Der Inhalt des aktiven Ausgabepuffers wird zuerst als String zurückgegeben, anschließend an den übergeordneten Puffer (oder direkt an den Browser) gesendet und der Puffer wird abschließend geschlossen.

Diese Funktion ist besonders nützlich, wenn man den Pufferinhalt sowohl verarbeiten (z. B. für Logging oder Nachbearbeitung) als auch tatsächlich ausgeben möchte, ohne ihn zweimal zu erfassen. Sie eignet sich gut in Szenarien, in denen Ausgabe-Puffer für Template-Rendering, Caching oder Content-Manipulation eingesetzt werden.

Wichtig: Die Funktion schließt den Puffer vollständig. Falls mehrere verschachtelte Puffer aktiv sind, wird nur der innerste (aktuelle) Puffer geleert und geschlossen. Danach ist der nächste äußere Puffer wieder aktiv.

Im Fehlerfall – wenn kein aktiver Ausgabepuffer vorhanden ist – gibt die Funktion false zurück und erzeugt eine PHP-Notice.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Inhalt des aktuellen Ausgabepuffers als string zurück. Gibt false zurück, wenn kein aktiver Ausgabepuffer existiert.

Beispiele

Pufferinhalt erfassen, verarbeiten und ausgeben

<?php
ob_start();

echo "<p>Hallo, Welt!</p>\n";
echo "<p>Noch eine Zeile.</p>\n";

// Inhalt holen, ausgeben und Puffer schließen
$inhalt = ob_get_flush();

// $inhalt enthält jetzt den gesamten gepufferten Text
file_put_contents('/tmp/ausgabe_log.txt', $inhalt);
<p>Hallo, Welt!</p> <p>Noch eine Zeile.</p>

Verschachtelte Puffer: nur den innersten leeren

<?php
ob_start(); // Äußerer Puffer
echo "Äußerer Inhalt\n";

ob_start(); // Innerer Puffer
echo "Innerer Inhalt\n";

// Inneren Puffer leeren, ausgeben und schließen
$innererInhalt = ob_get_flush();
echo "(Innerer Puffer hatte: " . strlen($innererInhalt) . " Zeichen)\n";

// Äußeren Puffer ebenfalls leeren
$äußererInhalt = ob_get_flush();
echo "[Ende]\n";
Innerer Inhalt Äußerer Inhalt (Innerer Puffer hatte: 17 Zeichen) [Ende]

// Wichtig · Fallstricke

Kein aktiver Puffer: Wenn ob_get_flush() aufgerufen wird, ohne dass zuvor ob_start() aktiv war, gibt die Funktion false zurück und löst eine E_NOTICE aus. Prüfe vor dem Aufruf ggf. mit ob_get_level() > 0, ob ein Puffer aktiv ist.

Unterschied zu verwandten Funktionen: ob_end_flush() gibt den Inhalt aus und schließt den Puffer, liefert aber keinen Rückgabewert. ob_get_contents() gibt den Inhalt zurück, ohne ihn zu senden oder den Puffer zu schließen. ob_get_flush() vereint beides.

Header-Ausgabe: Da ob_get_flush() Daten an den Browser sendet, können danach keine HTTP-Header mehr gesendet werden, sofern kein weiterer übergeordneter Puffer aktiv ist.