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

Kev*_*rke 5 php

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

另外,如果你使用它会有什么不同Transfer-Encoding: chunked吗?

cdh*_*wie 3

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

因此,如果您要做的事情需要花费大量时间并希望提前渲染页面,那么正确的方法是输出尽可能多的页面,调用 ,然后flush()执行你昂贵的任务。请确保时间不要超过声明的最大 PHP 脚本持续时间。


好吧,这个解释确实有点过于简单化了:

在某些情况下,标Content-Length头实际上可能会被发送。例如,如果脚本的响应小于 PHP 发送数据的缓冲区,和/或如果脚本执行时间低于一定的时间,则服务器将确切地知道内容的长度,并可以添加长度标头。

更进一步,flush() 可能实际上什么也没做。这取决于您的服务器配置和其他因素。请特别注意文档中有关服务器端行为的这些警告:

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

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

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

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