Forum und email

ob_start

(PHP 4, PHP 5)

ob_start — Ausgabepufferung aktivieren

Description

bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

Diese Funktion aktiviert die Ausgabepufferung. Während die Ausgabepufferung aktiv ist werden Scriptausgaben (mit Ausnahme von Headerinformationen) nicht direkt an den Client weitergegeben sondern in einem internen Puffer gesammelt.

Der Inhalt dieses internen Puffers kann mit Hilfe der Funktion ob_get_contents() in eine Stringvariable kopiert werden. Mit der Funktion ob_end_flush() können die Pufferinhalte an den Client ausgegeben werden, ob_end_clean() wird der Puffer ohne Ausgabe gelöscht.

ob_start() kann über den optionalen Parameter output_callback ein Funktion zur Nachbearbeitung der Pufferinhalte mitgegeben werden. Die Funktion sollte als einzigen Parameter einen String erwarten und auch einen String als Rückgabewert zurückliefern. Die so spezifizierte Funktion wird aufgerufen wenn der Pufferinhalt mit ob_end_flush() oder am Scriptende ausgegeben wird. Wenn output_callback aufgerufen wird erhält die Funktion den aktuellen Inhalt des Ausgabepuffers als Parameter, der Rückgabestring wird dann als neuer Pufferinhalt ausgegeben. Ist output_callback kein gültiger Callback-Parameter so gibt ob_start() false zurück. Hat die Callback-Funktion zwei Parameter so wird der zweite Parameter mit einer Bitmaske befüllt die sich aus den Werten PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT und PHP_OUTPUT_HANDLER_END zusammensetzen kann. Liefert output_callback FALSE als Ergebnis so wird der ursprüngliche Pufferinhalt unverändert ausgegeben.

Hinweis: ob_gzhandler() wurde in PHP 4.0.4 eingeführt um die gz-komprimierte Ausgabe an Clients zu ermöglichen die dies unterstützen. Wird ob_gzhandler() als Callback- Funktion spezifiziert so prüft es die vom Client unterstützten Ausgabecodierungen und gibt den Pufferinhalt dementsprechend codiert weiter.

Hinweis: Vor PHP 4.3.2 lieferte die Funktion bei ungültigen output_callback Werten noch nicht FALSE zurück.

Warnung

Einige Webserver (z.B. Apache) ändern das Arbeitsverzeichnis des Scripts vor dem Aufruf der Callback-Funktion am Scriptende. Sie können falls nötig mit Hilfe von chdir(dirname($_SERVER['SCRIPT_FILENAME'])) wieder in das Scriptverzeichnis zurückwechselni.

Wird ein Wert für den optionalen Parameter chunk_size angegeben so wird die Callback-Funktion jeweils nach dem ersten Newline- Zeichen nach Überschreiten der so festgelegten Anzahl von Ausgabebytes aufgerufen. Wird NULL als Parameterwert übergeben so wird der Parameter ignoriert.

Wird für den Parameter erase FALSE übergeben so wird der Ausgabepuffer nur zum Scriptende geleert (ab PHP 4.3.0).

Ausgabepuffer können verschachtelt werden, d.g. Sie können ob_start() erneut aufrufen während bereits ein anderer ob_start() Aufruf aktiv ist. Sie müssen nur sicher stellen das Sie später auch ob_end_flush() entsprechend oft aufrufen. Sind mehrere Callback-Funktion aktiv so werden die Ausgaben der Reihe nach von Ausgabepuffer zu Ausgabepuffer weitergegeben und die Callback-Funktionen in Verschachtelungsreihenfolge aufgerufen.

ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() und ob_start() können innerhalb einer Callback-Funktion nicht benutzt werden, das Ergebnis eines solchen Aufrufs ist nicht definiert. Wenn Sie den Inhalt eines Puffers aus einem Callback löschen wollen so gegeben Sie einfach den Leerstring "" zurück. Auch Funktionen wie print_r($expression, true) oder highlight_file($filename, true) die den Ausgabepuffermechanismus intern nutzen können innerhalb eines Callbacks nicht benutzt werden.

Example#1 Beispiel einer benutzerkonfigurierten Callbackfunktion

<?php

function callback($buffer
{
  
// ersetzt Äpfel mit Birnen
  
return (str_replace("Äpfel""Birnen"$buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>Das ist wie Äpfel mit Birnen zu vergleichen.</p>
</body>
</html>
<?php

ob_end_flush
();

?>

Would produce:

<html>
<body>
<p>Das ist wie Äpfel mit Äpfel zu vergleichen.</p>
</body>
</html>

Siehe auch ob_get_contents(), ob_end_flush(), ob_end_clean(), ob_implicit_flush(), ob_gzhandler(), ob_iconv_handler() mb_output_handler(), und ob_tidyhandler().