为什么这个PHP代码(彗星)不起作用?

时间:2010-12-23 14:50:34

标签: php comet

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?

有没有办法按照我想要的方式打印它?

2 个答案:

答案 0 :(得分:2)

可能是因为output buffering。尝试在文件顶部添加此项以关闭所有打开的缓冲区:

while(ob_get_level() > 0) {
    ob_end_flush();
}

您还可以在代码中的ob_flush()命令之后添加flush()

$i++;
echo $i;
flush();
ob_flush();

(请注意,你应该只做其中一个,而不是两个,但尝试一下)......

答案 1 :(得分:1)

问题可能是你需要一些垃圾数据才能在某些网页浏览器中启动流式传输。

link

的引用
  

首先,服务器必须推送一些   垃圾数据(大约2k)到浏览器   在推送真实数据之前。所以就   写出一些javascript评论   首先是浏览器。

for (int i = 0; i < 10; i++) {   
  write.print("<!——————————————–this is junk—————–!>"); 
}