我正在尝试每秒运行一个循环,持续25秒。
for($i = 0; $i <= 25; $i += 1){
echo $i;
sleep(1)
}
问题在于它只有在完全完成后才输出,因此在循环继续 25 次之后。有没有办法在每次休眠之前输出并且不等待完整的循环完成?
谢谢!
for($i = 0; $i <= 25; $i += 1){
echo $i;
sleep(1)
}
问题在于它只有在完全完成后才输出,因此在循环继续 25 次之后。有没有办法在每次休眠之前输出并且不等待完整的循环完成?
谢谢!
flush
函数会强制 PHP 在继续执行之前将所有输出缓冲推送到客户端。for($i = 0; $i <= 25; $i += 1){
echo $i;
flush();
sleep(1);
}
编辑:
在我的lighttpd服务器上测试后,我发现它会将输出缓冲为4096个字符的块,并且我认为其他浏览器可能具有类似的缓冲方案。此外,GZIP可以完全阻止flush
。不幸的是,由于HTTP的性质,没有办法测试它是否有效。
还有另一个使用此策略的问题是它会使PHP进程对其他请求被阻塞。这可能会导致请求积累。
ob_end_flush()
(跳过 ob_start()
)和 flush()
的组合即可。您是否在 PHP 服务器和您之间有代理服务器? - Annika Backstrom