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