Function.ob-start
Aus PHP-Wiki
ob_start — Ausgabepufferung aktivieren
Beschreibung
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.
Beispiel #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 Birnen mit Birnen 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().