flush
funkcja
Wymusza natychmiastowe wysłanie buforowanych danych wyjścia z PHP do serwera WWW lub systemu operacyjnego.
flush(): void
flush próbuje wypchnąć dane z wewnętrznego bufora PHP do warstwy niżej — serwera WWW (np. Apache, nginx) lub systemu operacyjnego. Nie gwarantuje, że dane dotrą do przeglądarki: serwer WWW i sam TCP mogą utrzymywać własne bufory.
flush nie dotyczy bufora ob_start(). Jeśli używasz buforowania wyjścia, musisz najpierw wywołać ob_flush() (lub ob_end_flush()), a dopiero potem flush().
Typowe zastosowanie — postęp długiej operacji wysyłany na bieżąco:
<?php
// Wyłącz buforowanie ob (jeśli jest aktywne)
while (ob_get_level() > 0) {
ob_end_flush();
}
for ($i = 1; $i <= 5; $i++) {
echo "Krok $i z 5...\n";
flush(); // wypchnij do serwera
sleep(1); // symulacja pracy
}
echo "Gotowe.\n";
Uwaga praktyczna: wiele nowoczesnych konfiguracji (nginx z proxy_buffering on, FastCGI, gzip) i tak buforuje odpowiedź po stronie serwera, przez co efekt flush jest niewidoczny dla użytkownika. Jeśli zależy ci na strumieniowaniu, zweryfikuj konfigurację serwera lub użyj Server-Sent Events albo WebSocket.