ошибка эха / печати в цикле php while - PullRequest
6 голосов
/ 04 марта 2010

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

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

}
?> 

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

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

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

Ответы [ 5 ]

15 голосов
/ 04 марта 2010

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

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

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

4 голосов
/ 04 марта 2010

Позвоните flush() после печати. ​​

2 голосов
/ 04 марта 2010

Вам необходимо использовать flush ()

1 голос
/ 30 января 2013

Примером цикла с 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 обрабатывать сообщения, и это увеличивает время выполнения.

0 голосов
/ 04 марта 2010

Вы можете поместить \n в echo или print, чтобы очистить буфер.

...