Вот мой код:
<?php for($j = 0; $j < 10; $j++){ print((string)$j . " "); sleep(1); } ?>
Код ожидает распечатки
0 1 2 3 4 5 6 7 8 9
до истечения 10 секунд, вместо того, чтобы печатать каждую секунду.
Почему это и как я могу это исправить?
Серверы обычно буферизуют вывод сценария на стороне сервера, пока в нем не будет достаточно, чтобы вывести что-то вроде этого. Комбинация настройки буферизации вывода и ручная очистка буфера. Обратите внимание на прямую линию impcit и линии flush и ob_flush.
<?php @ini_set("output_buffering", "Off"); @ini_set('implicit_flush', 1); @ini_set('zlib.output_compression', 0); @ini_set('max_execution_time',1200); header( 'Content-type: text/html; charset=utf-8' ); echo "Testing time out in seconds\n"; for ($i = 0; $i < 10; $i++) { echo $i." -- "; if(sleep(1)!=0) { echo "sleep failed script terminating"; break; } flush(); ob_flush(); } ?>