PHP代码是在页眉还是页脚中是否重要?

时间:2011-09-05 05:39:00

标签: php

PHP是否在处理文件时发送代码,还是组成整个HTML响应然后发送?例如,将昂贵的PHP函数移动到服务器上的文件页脚中会有什么不同吗?

另外,如果您使用Transfer-Encoding: chunked

会有什么不同吗?

1 个答案:

答案 0 :(得分:3)

最终,这取决于。我使用的大多数PHP托管机制都会以块的形式传输响应,因为它是从脚本中收到的,完全省略Content-Length标头(因为事先不知道)。您可以定期使用flush()刷新响应,以强制服务器将目前缓冲的内容传输到客户端。

因此,如果您要做的事情需要花费很多时间并且希望允许页面提前呈现,那么执行此操作的正确方法是尽可能多地输出页面,调用{ {1}},然后执行昂贵的任务。请确保不要超过声明的最大PHP脚本持续时间。


好的,所以这个解释确实有点过于简单:

在某些情况下,实际上可能会发送flush()标头。例如,如果脚本的响应小于PHP的发送数据缓冲区,并且/或者如果脚本需要一定的时间来执行,那么服务器将确切地知道内容的长度并且可以添加长度标头。

此外,Content-Length 实际上可能无法执行任何操作。这取决于您的服务器配置和其他因素。请特别注意有关服务器端行为的文档中的这些警告:

  

flush()可能无法覆盖Web服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着如果使用ob输出缓冲区,则必须同时调用ob_flush()和flush()来刷新ob输出缓冲区。

     

多个服务器,尤其是Win32上的服务器,仍会缓冲脚本的输出,直到它终止,然后才将结果传输到浏览器。

     

像mod_gzip这样的Apache服务器模块可能会自行缓冲,这会导致flush()不会立即将数据发送到客户端。

换句话说:测试,测试,测试。确保Web服务器不会干扰您尝试实现的行为。如有必要,请重新配置Web服务器。

相关问题