PHP 在页面加载时回显内容

PHP echo-ing content as page loads

提问人:John 提问时间:6/18/2011 更新时间:6/18/2011 访问量:1465

问:

所以我正在对 PHP/Apache 进行一些实验。 假设我有这个代码。

<div>DIV 1</div>
<?php sleep(2); ?>
<div>DIV 2</div>
<?php sleep(2); ?>
<div>DIV 3</div>
<?php sleep(2); ?>
<div>DIV 4</div>
<?php sleep(2); ?>

出于某种原因,在我的本地 apache Web 服务器上,所有数据在执行所有 4 个 sleep()s(8 秒)后立即出现在浏览器中。

但是,如果我在主机的服务器上运行它,数据会实时回显到浏览器。 如...div1 出现,2 秒后出现 div 2,依此类推。

为什么?这是Apache中的某些设置吗?

PHP Apache HTTP

评论

0赞 Lightness Races in Orbit 6/18/2011
它通过多个层和设备进行缓冲和缓存,您不能也不应该尝试在很大程度上控制它们。

答:

6赞 dader 6/18/2011 #1

不,它可能是 php 中的一个设置。

在本地服务器中,output_buffering 在 php.ini 文件中启用。

您可以通过设置来禁用它:

output_buffering = off

要确保每次使用类似 echo 的语句时都会将内容发送到浏览器,请添加:

implicit_flush = on

您还可以通过给output_buffering提供一个值来设置缓冲区大小。

output_buffering = 4096

此处的缓冲区大小为 4KB。

输出缓冲告诉 php 将所有要发送到浏览器的数据都保存在内存中,直到它在代码中编码 flush() 指令,缓冲区恰好已满,或者是脚本的结束。

以下是 php.net 输出缓冲区的完整参考: php 输出缓冲区

评论

0赞 dader 6/18/2011
哦,对不起,我的英语!我的意思是 4KB。
0赞 John 6/18/2011
你是对的,输出缓冲已打开。我禁用了它,但它仍然做同样的事情。还有其他想法吗?
1赞 dader 6/18/2011
只是为了仔细检查,Apache 是否重新启动?
0赞 dader 6/18/2011
如果你 phpinfo() 它告诉你关于这个选项的什么?
1赞 dader 6/18/2011
您可能需要在 php 中添加“implicit_flush = on”.ini