это мой первый вопрос здесь о stackoverflow, мне просто интересно .. можно ли задержать цикл в PHP? Я пытаюсь напечатать каждый результат в браузере и приостановить сценарий, используя sleep (), прежде чем обрабатывать другой цикл, но он не работает, вот сценарий, который я использую:
<?php $n = 1; while ($n < 10) { echo $n."<br />"; $n++; sleep(1); } ?>
PS: Я использую Firefox и Apache2 на Linux Mint.
Серверы обычно буферизуют вывод сценария на стороне сервера, пока в нем не будет достаточно, чтобы вывести что-то вроде этого. Комбинация настройки буферизации вывода и ручная очистка буфера. Обратите внимание на прямую линию 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 < 1150; $i++) { echo $i." -- "; if(sleep(1)!=0) { echo "sleep failed script terminating"; break; } flush(); ob_flush(); } ?>
PHP выполняет и полностью выводит свой вывод до того, как страница отобразит его содержимое. Итак, нет, вы не можете задержать цикл PHP, как хотите.
Вы можете и должны сделать это с помощью javascript. Если вам нужна информация с сервера, напечатанного с задержкой, как это, вы можете использовать AJAX для вывода информации с сервера по мере ее появления.