前几天我注意到我为 php 5 编写的一个新脚本开始输出在 php 脚本实际完成之前可以查看的 html。4 发生过这种情况吗?
例如,我有一个很长的循环,每次迭代都会回显一些东西。就 kb 而言,输出很小,所以我不认为这是由于下载速度而导致的滞后。有人可以解释输出的差异吗?
也许output_buffering指令的配置有所不同,在php.ini
?
如果output_buffering
启用,PHP 会将生成的输出“保留”在内存中(至少,如果它没有变得大于内存缓冲区的大小),并且仅在页面生成完成时将其发送到浏览器。
如果output_buffering
禁用,则在生成时立即发送输出,即使脚本的执行尚未完成。
我怀疑 PHP 4 和 5 之间在这方面存在差异,但是您可以在两个版本上获得这种行为,即通过启用/禁用output_buffer
. 也许 PHP 5 的默认值与 PHP 4 的不同?(没查过)
发送数据时,取决于 PHP 配置,它是一个输出缓冲区,其行为类似于缓冲区。
话虽如此,您可以使用该功能ob_start()
并ob_end_flush()
控制缓冲区。Zend 框架通过输出缓冲做了一些聪明的事情......
通常的嫌疑人是:
A close look at phpinfo() at a tool to see HTTP headers can help you.