проблема echo/print в цикле php while

Мне нужно исправить это.
вот часть моего кода

<?php
$number = 30;
while($number > 0) {
 $number--;
 sleep(30);
 print "$number . Posted<br>";

}
?> 

процесс цикла в цикле на самом деле намного больше, я просто помещаю важный материал.

в любом случае, как вы можете видеть надо распечатать
30 комментария
(подождите 30 секунд)
29 комментария
(подождите 30 секунд)
28 комментария
(подождите 30 секунд)

Но вместо этого он ждет, пока цикл закончится, а затем просто печатает все сразу. Есть ли решение для этого? Я был думаю, метод ajax, но я не знаю ни одного.

5 ответов


приятно, что все объяснили почему.

это потому, что по умолчанию PHP будет обрабатывать все, прежде чем он "спустил" что-либо в браузер. Просто печатая каждую строку, он сохраняет эту информацию в буфере, который будет печататься одновременно после завершения выполнения PHP.

Если вы хотите, чтобы PHP сбросил этот контент в браузер сразу после строки, вам нужно позвонить flush() после каждого из них, то он будет выводить текст по одной строке за раз после каждого из них вызывается.


вызов flush() после печати.


вам нужно использовать flush()


примером цикла с flush () является

<?php
 ob_start();
 for ($i = 0; $i < 10; $i++)
 {
   echo "<div>" . time() . ": Iteration $i</div>";
   sleep(1);
   ob_flush();
   flush();
 } 
 ob_end_flush();
?>

вы не должны часто смывать, потому что вы заставляете php обрабатывать сообщения, и это увеличит время выполнения.


- вы не могли бы \n на echo или print очистить буфер.