PHP ob_get_contents() Funktion: Alles was Sie wissen müssen
Erfahren Sie, wie die PHP-Funktion ob_get_contents() den Inhalt des Ausgabepuffers ausliest, ohne ihn zu leeren oder die Pufferung zu beenden.
Normalerweise sendet PHP alles, was Ihr Skript per echo oder print ausgibt, direkt an den Browser. Output Buffering (Ausgabepufferung) ermöglicht es, diese Ausgabe abzufangen und stattdessen im Speicher zu halten, sodass Sie sie erfassen, verändern oder verwerfen können, bevor sie den Client erreicht. Die Funktion ob_get_contents() ist das Werkzeug, mit dem Sie das, was sich aktuell im Puffer befindet, auslesen können.
Dieses Kapitel erklärt, was ob_get_contents() zurückgibt, wann Sie sie einsetzen sollten, welche Fallstricke es gibt und wie sie sich neben den anderen Ausgabe-Kontrollfunktionen einfügt.
Was ob_get_contents() macht
ob_get_contents() gibt den Inhalt des aktiven Ausgabepuffers zurück, ohne ihn zu leeren oder die Pufferung zu stoppen. Der Puffer sammelt weiterhin Ausgaben, sodass Sie die Funktion mehrmals aufrufen können, um zu sehen, was bisher angesammelt wurde.
Sie funktioniert nur, während ein durch ob_start() gestarteter Puffer aktiv ist. Wenn kein aktiver Puffer vorhanden ist, gibt sie false zurück.
Syntax
ob_get_contents(): string|false- Parameter: keine.
- Rückgabewert: der aktuelle Pufferinhalt als string, oder
false, wenn die Ausgabepufferung nicht aktiv ist.
Ein einfaches Beispiel
<?php
ob_start(); // 1. Start capturing output
echo "This will be buffered"; // 2. Goes into the buffer, not the screen
$output = ob_get_contents(); // 3. Read the buffer into a variable
ob_end_clean(); // 4. Discard the buffer and stop buffering
echo "Captured: " . $output;Ausgabe:
Captured: This will be bufferedHier startet ob_start() die Pufferung, sodass das echo im Speicher gehalten und nicht an den Browser gesendet wird. ob_get_contents() kopiert diesen Text in $output. Schließlich verwirft ob_end_clean() den Puffer und schaltet die Pufferung ab — ohne diesen Aufruf würde der gepufferte Text noch auf der Seite ausgegeben werden.
ob_get_contents() leert den Puffer nicht
Ein häufiger Irrtum: Das Auslesen des Puffers lässt ihn unverändert. Die Ausgabe ist weiterhin vorhanden und wird an den Browser gesendet, wenn die Pufferung endet (sofern Sie den Puffer nicht leeren).
<?php
ob_start();
echo "Hello";
$first = ob_get_contents(); // "Hello"
echo " World";
$second = ob_get_contents(); // "Hello World" — the buffer kept growing
ob_end_flush(); // sends "Hello World" to the browser
var_dump($first, $second);Ausgabe:
Hello World
string(5) "Hello"
string(11) "Hello World"Wenn Sie den Puffer stattdessen in einem Schritt auslesen und leeren möchten, verwenden Sie ob_get_clean().
Wann würde ich das verwenden?
- Gerenderte Ausgabe erfassen. Ein Template rendern oder eine Datei einbinden, dann das Ergebnis als string statt als direkte Ausgabe abrufen — praktisch für E-Mails, Caching oder das Erzeugen einer Datei.
- HTML nachbearbeiten. Eine Seite puffern, mit
ob_get_contents()auslesen, eine Transformation durchführen (minifizieren, Platzhalter ersetzen) und dann das Ergebnis ausgeben. - Ausgabe unterdrücken oder prüfen, die von einer Funktion oder Bibliothek direkt gedruckt wird.
<?php
function renderGreeting(string $name): void
{
echo "<p>Hello, {$name}!</p>";
}
ob_start();
renderGreeting("Ada");
$html = ob_get_contents(); // capture instead of printing
ob_end_clean();
$html = str_replace("Hello", "Welcome", $html);
echo $html;Ausgabe:
<p>Welcome, Ada!</p>Fallstricke
- Gibt
falsezurück, nicht einen leeren string, wenn kein Puffer aktiv ist. Verwenden Sie eine strikte Prüfung (=== false), wenn Sie „kein Puffer" von „leerer Puffer" unterscheiden müssen. - Verschachtelte Puffer:
ob_get_contents()liest nur den innersten (aktuellen) Puffer. Um zu sehen, wie viele Puffer gestapelt sind, verwenden Sieob_get_level(). - Die Pufferung wird nicht beendet. Kombinieren Sie die Funktion mit
ob_end_clean()oderob_end_flush(), wenn Sie fertig sind.
Verwandte Funktionen
ob_start()— Ausgabepufferung einschalten.ob_get_clean()— Pufferinhalt abrufen und verwerfen.ob_get_length()— Pufferlänge in Bytes abrufen.- PHP-Ausgabesteuerung – Übersicht — die vollständige Familie der
ob_*-Funktionen.
Fazit
ob_get_contents() liest den aktuellen Ausgabepuffer als string, ohne ihn zu leeren oder die Pufferung zu beenden. Sie ist der Grundbaustein für das Erfassen gerenderter Ausgaben, die Nachbearbeitung von HTML und das Unterdrücken direkter Ausgaben. Denken Sie daran, dass die Funktion false zurückgibt, wenn kein Puffer aktiv ist, und dass der Puffer unverändert bleibt — greifen Sie auf ob_get_clean() zurück, wenn Sie in einem Schritt lesen und leeren möchten.