2010-03-04 75 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來處理消息,這將增加執行的時候你不應該經常進行清洗。