ob_start
(PHP 4, PHP 5, PHP 7, PHP 8)
ob_start — Ausgabepufferung aktivieren
Beschreibung
$callback
= null
, int $chunk_size
= 0, int $flags
= PHP_OUTPUT_HANDLER_STDFLAGS
): boolDiese Funktion aktiviert die Ausgabepufferung. Während die Ausgabepufferung aktiv ist, werden Skriptausgaben (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 Zeichenketten-Variable kopiert werden. Um auszugeben, was im internen Puffer gespeichert ist, wird ob_end_flush() verwendet. Alternativ wird der Puffer mit ob_end_clean() stillschweigend verworfen.
Einige Webserver (z. B. Apache) ändern das Arbeitsverzeichnis des Skripts
vor dem Aufruf der Callback-Funktion. Bei Bedarf kann in der
Callback-Funktion mit Hilfe von beispielsweise
chdir(dirname($_SERVER['SCRIPT_FILENAME']))
wieder in
das Skriptverzeichnis zurückgewechselt werden.
Ausgabepuffer können verschachtelt werden, d. h. ob_start() kann erneut aufgerufen werden, während bereits ein anderer ob_start()-Aufruf aktiv ist. Es muss nur sichergestellt werden, dass später auch entsprechend oft ob_end_flush() aufgerufen wird. Sind mehrere Callback-Funktionen aktiv, so werden die Ausgaben der Reihe nach von Ausgabepuffer zu Ausgabepuffer weitergegeben und die Callback-Funktionen in Verschachtelungsreihenfolge aufgerufen.
Wenn die Ausgabepufferung am Ende des Skripts noch aktiv ist, gibt PHP den Inhalt automatisch aus.
Parameter-Liste
-
callback
-
Optional kann eine
callback
-Funktion angegeben werden. Diese Funktion nimmt eine Zeichenkette als Parameter entgegen und sollte eine Zeichenkette zurückgeben. Die Funktion wird aufgerufen, wenn der Ausgabepuffer geleert (gesendet) oder bereinigt wird (mit ob_flush(), ob_clean() oder einer ähnlichen Funktion), oder wenn der Ausgabepuffer am Ende der Anfrage zum Browser gesendet wird. Wenncallback
aufgerufen wird, dann empfängt es den Inhalt des Ausgabepuffers als Parameter und sollte einen neuen Ausgabepuffer als Ergebnis zurückgeben, der an den Browser gesendet wird. Istcallback
keine aufrufbare Funktion, gibt diese Funktionfalse
zurück. Dies ist die Signatur des Callbacks:handler(string$buffer
, int$phase
= ?): string-
buffer
- Der Inhalt des Ausgabepuffers.
-
phase
-
Die Bitmaske von
PHP_OUTPUT_HANDLER_*
-Konstanten.
Wenn
callback
false
zurückgibt, wird die ursprüngliche Eingabe an den Browser gesendet.Um den Parameter
callback
auszulassen, kann einnull
-Wert übergeben werden.ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() und ob_start() können nicht innerhalb einer Callback-Funktion aufgerufen werden; das Ergebnis eines solchen Aufrufs ist nicht definiert. Wenn der Inhalt eines Puffers gelöscht werden soll, genügt es, "" (eine leere Zeichenkette) aus der Callback-Funktion zurückzugeben. Auch Funktionen wie
print_r($expression, true)
oderhighlight_file($filename, true)
, die den Ausgabepuffer-Mechanismus intern nutzen, können nicht innerhalb eines Callbacks aufgerufen werden.Hinweis:
Die Funktion ob_gzhandler() existiert, um es zu erleichtern, gz-kodierte Daten an Webbrowser zu senden, die komprimierte Webseiten unterstützen. ob_gzhandler() ermittelt, welche Art von Inhaltskodierung der Browser akzeptiert, und liefert seine Ausgabe entsprechend.
-
-
chunk_size
-
Wird der optionale Parameter
chunk_size
übergeben, dann wird der Puffer nach jedem Ausgabeaufruf geleert, was dazu führt, dass die Länge des Puffers größer oder gleichchunk_size
ist. Der Vorgabewert0
bedeutet, dass die Ausgabefunktion nur aufgerufen wird, wenn der Ausgabepuffer geschlossen wird. -
flags
-
Beim Parameter
flags
handelt es sich um eine Bitmaske, die die Operationen steuert, die mit dem Ausgabepuffer durchgeführt werden können. Die Vorgabe ist, zu erlauben, dass Ausgabepuffer bereinigt, geleert und entfernt werden dürfen, was ausdrücklich mitPHP_OUTPUT_HANDLER_CLEANABLE
|PHP_OUTPUT_HANDLER_FLUSHABLE
|PHP_OUTPUT_HANDLER_REMOVABLE
, oderPHP_OUTPUT_HANDLER_STDFLAGS
als Abkürzung, eingestellt werden kann.Jedes Flag steuert den Zugriff auf einen Satz von Funktionen, wie im Folgenden beschrieben:
Konstante Funktionen PHP_OUTPUT_HANDLER_CLEANABLE
ob_clean(), ob_end_clean() und ob_get_clean(). PHP_OUTPUT_HANDLER_FLUSHABLE
ob_end_flush(), ob_flush() und ob_get_flush(). PHP_OUTPUT_HANDLER_REMOVABLE
ob_end_clean(), ob_end_flush() und ob_get_flush().
Rückgabewerte
Gibt bei Erfolg true
zurück. Bei einem Fehler wird false
zurückgegeben.
Beispiele
Beispiel #1 Beispiel einer benutzerdefinierten Callback-Funktion
<?php
function callback($buffer)
{
// ersetzt alle Ä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();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
<html> <body> <p>Das ist wie Birnen mit Birnen zu vergleichen.</p> </body> </html>
Beispiel #2 Erzeugen eines nicht löschbaren Ausgabepuffers
<?php
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_REMOVABLE);
?>
Siehe auch
- ob_get_contents() - Liefert den Inhalt des Ausgabepuffers
- ob_end_clean() - Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
- ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
- ob_implicit_flush() - Schaltet die implizite Ausgabe ein bzw. aus
- ob_gzhandler() - ob_start callback function to gzip output buffer
- ob_iconv_handler() - Konvertiert Zeichensatzkodierung als Ausgabepuffer-Handler (output buffer handler)
- mb_output_handler() - Callback function converts character encoding in output buffer
- ob_tidyhandler() - ob_start callback function to repair the buffer