繁体   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