簡體   English   中英

為什么此PHP代碼(comet)不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM