2010-03-04 3 views
6

Мне нужно исправить это.
здесь только часть моего кодапроблема эхо/печати в php while loop

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

} 
?> 

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

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

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

ответ

15

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

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

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

+0

+1 для обеспечения хорошего объяснения. – GSto

0

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

1

Пример петли с румянцем() является

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

Вы не должны смывать часто, потому что вы вынуждаете PHP для обработки сообщений, и это приведет к увеличению времени выполнения.