[英]Why doesn't this PHP code (comet) work?
set_time_limit(0);
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
flush();
while($i < 10)
{
sleep(1);
$i++;
echo $i;
flush();
}
為什么我的代碼沒有打印出1,然后等待並打印2,然后等待並打印3。相反,它只等待10秒並立即打印出12345678910?
有沒有一種方法可以按需要將其打印成塊?
可能是由於輸出緩沖 。 嘗試將其添加到文件頂部以關閉所有打開的緩沖區:
while(ob_get_level() > 0) {
ob_end_flush();
}
您還可以在代碼中的flush()
命令之后添加ob_flush()
:
$i++;
echo $i;
flush();
ob_flush();
(請注意,您只需要執行其中之一,而不是兩者都可以,但是請嘗試一下)...
問題可能是您需要一些垃圾數據才能在某些Web瀏覽器中開始流式傳輸。
此鏈接的報價
首先,在推送真實數據之前,服務器必須將一些垃圾數據(大約2k)推送到瀏覽器。 因此,只需先向瀏覽器寫一些JavaScript注釋即可。
for (int i = 0; i < 10; i++) {
write.print("<!——————————————–this is junk—————–!>");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.