2010-03-04 74 views
6

我需要一个修复。
这里只是我的代码回声/印刷问题在PHP while循环

<?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 2010-03-04 19:53:23

0

你可能把\nechoprint刷新缓冲区。

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来处理消息,这将增加执行的时候你不应该经常进行清洗。