尽管我尽了一切努力让它发挥作用,但它似乎还是不起作用。
以下是我所做的:
- 输出缓冲=4096
- zlib.output_compression=关闭
- 尝试使用ob_implicit_flush()
- 尝试使用ob_flush()
- 将ini设置中的缓冲区大小output_braining减小到1
下面是我试图开始工作的代码(基本上每1秒输出一行),但我会在15秒后得到整个输出。
使用ob_implicit_flush():
<?php
ob_implicit_flush();
for($i=0;$i<=15;$i++)
{
print($i."<BR />");
sleep(1);
}
使用ob_start()和ob_flush()法:
<?php
ob_start();
for($i=0;$i<=15;$i++)
{
print($i."<BR />");
ob_flush();
}
我还缺少其他PHP设置吗?请帮忙。
编辑:使用OP在这个SO问题中的例子,它是有效的:PHP缓冲区为什么''r''n
我发现我必须执行str_repeat()来生成一个字符串以使缓冲区溢出。为什么php手册中没有提到这些?这真的是程序吗?
PHP对一个请求返回一个响应。如果在该代码中有sleep()
调用,那么整个响应将等待这些调用。即使你在print
之间睡了一秒钟,PHP也不会把响应块传回浏览器。
如果您使用PHP作为交互式控制台,那么它应该可以像您预期的那样工作和行为。
阅读http://www.php.net/flush描述,它可以帮助你了解发生了什么。