Mit den Funktionen zur Ausgabesteuerung können Sie die Ausgabe
eines Skripts steuern. Dies kann in verschiedenen Situationen
ganz nützlich sein, besonders wenn Sie header an den Browser
schicken müssen nachdem Ihr Skript bereits etwas ausgegeben
hat. Die Ausgabesteuerungsfunktionen gelten nicht für Header,
die mit header() oder setcookie()
geschickt wurden, sondern nur für Daten ,die mit echo()
gesendet wurden oder für Daten zwischen PHP-Codeblöcken.
Anmerkung:
Bei Upgrades von PHP 4.1.x (und 4.2.x) auf 4.3.x müssen Sie wegen
eines Fehlers in früheren Versionen sicherstellen das
implict_flush in Ihrer php.ini auf
OFF gesetzt ist, anderenfalls werden
Ausgaben auch nach Aufruf von ob_start()
noch an den Browser weitergegeben.
Diese Erweiterung benötigt keine externen Bibliotheken.
Für diese Funktionen ist keine Installation erforderlich,
diese gehören zum Grundbestand von PHP.
Das Verhalten dieser Funktionen wird
durch Einstellungen in der php.ini beeinflusst.
Tabelle 1. Output Control Konfigurationsoptionen
| Name | Default | Änderbar | Kommentar |
|---|
| output_buffering | "0" | PHP_INI_PERDIR | |
| output_handler | NULL | PHP_INI_PERDIR | Verfügbar 4.0.4. |
| implicit_flush | "0" | PHP_INI_ALL | PHP_INI_PERDIR in PHP <= 4.2.3. |
Weitere Details und die Definitionen der
PHP_INI_*-Konstanten finden Sie im
Anhang H.
Hier eine kurze Erklärung der
Konfigurationsoptionen:
output_buffering
boolean/integer
Sie können Output Buffering für alle Scripte aktivieren indem Sie
diesen Wert auf 'On' setzen. Wenn Sie die Größe des Buffers auf
limitieren wollen so können Sie die maximale Größe in Bytes an
Stelle von 'On' angeben (z.B. output_buffering=4096).
Ab PHP 4.3.5 ist dieser Wert für den PHP CLI Kommandozeileninterpreter
grundsätzlich 'Off'.
output_handler
string
Sie können die Ausgaben ihres Scriptes an eine Funktion weiterleiten.
Wenn sie z.B. mb_output_handler() als output_handler
setzen so wird das Character Encoding transparent in das spezifizierte
Encoding umgewandelt. Das Setzen einer output_handler Funktion aktiviert
das Output Buffering automatisch.
Anmerkung:
Es können nur eingebaute PHP-Funktionen angegeben werden,
benutzerdefinierte Funktionen können mit Hilfe der
ob_start() Funktion genutzt werden.
implicit_flush
boolean
Diese Option ist standardmäßig deaktiviert. Wenn Sie implicit_flush
aktivieren so wird PHP angewiesen nach jedem Output-Block automatisch
den Output Layer zu leeren. Dies ist äquivalent zu
flush() Aufrufen nach jedem echo()
oder print() Aufruf und nach jedem HTML-Block.
In Webanwendungen hat diese Option massive Performanceauswirkungen
und sollte wenn überhaupt dann nur zu Debuggingzwecken aktiviert
werden. Im PHP CLI Kommandozeileninterpreter dagegen ist diese
Option standardmäßig aktiviert.
Siehe auch ob_implicit_flush().
Diese Erweiterung definiert keine Resource-Typen.
Diese Erweiterung definiert keine Konstanten.
Beispiel 1. Beispiel Ausgabesteuerung
<?php
ob_start(); echo "Hello\n";
setcookie ("cookiename", "cookiedata");
ob_end_flush();
?>
|
|
Im obigen Beispiel wird die Ausgabe der echo()
solange im Ausgabepuffer zwischengespeichert, bis die Funktion
ob_end_flush() aufgeufen wird. In der
Zwischenzeit speichert der Aufruf von setcookie()
erfolgreich einen Cookie, ohne einen Fehler zu erzeugen.
(Normalerweise können Sie keine header an den Browser mehr
schicken, wenn schon Daten ausgegeben wurden.)