Signatur
Beschreibung
ob_implicit_flush() aktiviert oder deaktiviert den sogenannten impliziten Flush-Modus. Ist dieser Modus aktiviert, wird nach jedem Aufruf einer Ausgabefunktion (wie echo, print oder printf) automatisch ein flush() ausgeführt, das die Ausgabe sofort an den Client sendet, ohne auf das Ende des Skripts zu warten.
Dies ist besonders nützlich bei lang laufenden Skripten oder beim Streamen von Daten, wenn der Benutzer Fortschrittsmeldungen in Echtzeit sehen soll. Ein typischer Anwendungsfall sind CLI-Skripte oder Webseiten, die schrittweise aufgebaut werden sollen (z. B. während einer aufwändigen Datenverarbeitung).
Zu beachten ist, dass ob_implicit_flush() den PHP-internen Output-Buffer nicht deaktiviert. Wird ein aktiver Output-Buffer (via ob_start()) verwendet, so hat der implizite Flush keine direkte Wirkung auf den Browser, da der Buffer zuerst geleert werden muss. Es empfiehlt sich daher, vorhandene Output-Buffer mit ob_end_flush() zu schließen, bevor diese Funktion aktiviert wird.
Im Webserverkontext hängt die tatsächliche Wirkung auch von der Serverkonfiguration ab (z. B. aktiviertes gzip-Buffering beim Apache). Bei der Verwendung über die CLI ist der Effekt hingegen direkt spürbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $enable | bool | true | true aktiviert den impliziten Flush-Modus, false deaktiviert ihn wieder. Standardmäßig wird der Modus aktiviert. |
Rückgabewert
Beispiele
Echtzeit-Fortschrittsanzeige im Browser
<?php
// Bestehende Output-Buffer schließen, damit der implizite Flush wirkt
while (ob_get_level() > 0) {
ob_end_flush();
}
// Impliziten Flush-Modus aktivieren
ob_implicit_flush(true);
for ($i = 1; $i <= 5; $i++) {
echo "Schritt $i von 5 wird verarbeitet...\n";
// Simuliert eine aufwändige Operation
sleep(1);
}
echo "Fertig!\n";
Impliziten Flush wieder deaktivieren
<?php
// Aktivieren
ob_implicit_flush(true);
echo "Dieser Text wird sofort gesendet.\n";
// Deaktivieren
ob_implicit_flush(false);
echo "Dieser Text wird erst am Skriptende gesendet.\n";
// Manueller Flush möglich
flush();
// Wichtig · Fallstricke
Webserver-Buffering: Viele Webserver (z. B. Apache mit mod_deflate/gzip) oder Reverse Proxies (z. B. nginx) puffern die Ausgabe unabhängig von PHP. In diesen Fällen kann ob_implicit_flush() alleine nicht das gewünschte Streaming-Verhalten erzielen. Die Serverkonfiguration muss entsprechend angepasst werden (z. B. X-Accel-Buffering: no bei nginx).
Output-Buffer-Konflikt: Ist ein aktiver Output-Buffer (via ob_start()) vorhanden, wird die Ausgabe trotz aktiviertem impliziten Flush zunächst im Buffer gehalten und nicht sofort an den Client gesendet. Alle aktiven Buffer sollten vor der Aktivierung des impliziten Flush mit ob_end_flush() geschlossen werden.
Veralteter Integer-Parameter: In älteren PHP-Versionen (vor PHP 8.0) akzeptierte die Funktion einen int-Wert (0 für deaktivieren, jeder andere Wert für aktivieren). Ab PHP 8.0 wird offiziell bool verwendet.