Signatur
Beschreibung
ob_get_contents() liest den bisher gepufferten Ausgabeinhalt und gibt ihn als String zurück. Der Puffer selbst bleibt dabei unverändert aktiv – das Puffern wird weder gestoppt noch der Inhalt gelöscht. Die Funktion ist nützlich, wenn man den bisher erzeugten Output auswerten oder transformieren möchte, bevor man ihn weiterverarbeitet oder ausgibt.
Ein typischer Anwendungsfall ist das Erfassen der Ausgabe von Funktionen oder Template-Dateien, die direkt nach stdout schreiben. Man startet den Puffer mit ob_start(), lässt den Code laufen, liest den Inhalt mit ob_get_contents(), und beendet den Puffer anschließend mit ob_end_clean() (um ihn zu verwerfen) oder ob_end_flush() (um ihn auszugeben).
Verschachtelte Ausgabepuffer sind möglich: ob_get_contents() liest dabei immer den innersten (zuletzt gestarteten) Puffer. Erst nach dessen Beendigung ist der darunterliegende Puffer aktiv.
Ist kein aktiver Ausgabepuffer vorhanden, gibt die Funktion false zurück. Eine Prüfung mit ob_get_level() kann sicherstellen, dass ein Puffer aktiv ist, bevor ob_get_contents() aufgerufen wird.
Rückgabewert
string zurück. Falls kein Ausgabepuffer aktiv ist, wird false zurückgegeben.Beispiele
Ausgabe einer Funktion als String erfassen
<?php
ob_start();
// Irgendeine Funktion, die direkt ausgibt:
echo 'Hallo, ';
echo 'Welt!';
$inhalt = ob_get_contents();
ob_end_clean(); // Puffer beenden, ohne auszugeben
// Inhalt weiterverarbeiten:
$transformiert = strtoupper($inhalt);
echo $transformiert;
?>
Template-Datei als String einlesen
<?php
// template.php enthält z. B.: <h1>Willkommen, <?= $name ?></h1>
$name = 'Anna';
ob_start();
include 'template.php';
$html = ob_get_contents();
ob_end_clean();
// $html enthält jetzt den gerenderten Template-String
echo htmlspecialchars($html);
?>
Sicherheitscheck: Puffer-Level prüfen vor Aufruf
<?php
if (ob_get_level() > 0) {
$pufferinhalt = ob_get_contents();
echo 'Aktueller Pufferinhalt: ' . strlen($pufferinhalt) . ' Zeichen';
} else {
echo 'Kein aktiver Ausgabepuffer vorhanden.';
}
?>
// Wichtig · Fallstricke
Fallstrick: ob_get_contents() beendet oder leert den Puffer nicht. Vergisst man anschließend ob_end_clean() oder ob_end_flush(), kann es zu unerwartetem Output oder Speicherlecks durch nicht geschlossene Puffer kommen.
Als kürzere Alternative kann ob_get_clean() verwendet werden, das den Pufferinhalt zurückgibt und den Puffer gleichzeitig beendet – äquivalent zu ob_get_contents() gefolgt von ob_end_clean().
Bei aktiviertem zlib.output_compression in der php.ini oder beim Einsatz von ob_start('ob_gzhandler') kann der gepufferte Inhalt bereits komprimiert sein, was eine direkte String-Verarbeitung erschwert.