2

我的目标是在我的 php 脚本将页面的其余部分拼接在一起并在完成后发送它时,尽早刷新我网站的标题部分。重要的是块被压缩发送到浏览器。(我正在使用 Apache/2.2 和 PHP/5.3.4)

现在我正试图通过在我的 PHP 脚本中调用 ini_set("zlib.output_compression", "On") 来实现这一点。但是,如果我在脚本中的任何地方使用 flush(),即使在最后,压缩也将不再起作用。

问题是:

a) 通过使用此方法,zlib 将刷新输出缓冲区并将压缩块发送到浏览器,一旦达到此输出缓冲区的大小?

b)如果是这样,有没有办法通过设置zlib的内部缓冲区大小来精细控制zlip何时发送我的块?默认为 4KB。

c) 是否有任何好的替代方案可以实现早期压缩冲洗,可能对我想要冲洗它的时间进行更精细的控制?也许我完全走错了路:)

4

1 回答 1

1

自从我不得不在 OB 上使用 zlib 压缩以来已经很久了(稍后会详细说明原因)。但是,让我尝试说服您在 PHP 中关闭 OB 上的 zlib 压缩。首先,有一点背景,以确保我们在同一页面上。

OB是如何工作的

每次 php 打印一些东西,如果没有 OB,它将直接发送到 apache 并从 apache 发送到浏览器。相反,使用 OB,输出在 apache 处停止并等待数据刷新(到浏览器)或脚本结束并自动刷新数据。通过将 Apache 缓冲到进程的 Web 浏览器阶段来生成页面时,这可以节省大量时间和资源。

为什么不在 PHP 中使用 OB 压缩

为什么要让 PHP 压缩它?执行此类任务(以及压缩 js 文件)应该是服务器的工作。为了彻底释放 apache 来处理 php,您“应该”做的是将 NGINX 安装为公众面前。设置为反向代理非常容易,您甚至可以将其安装在与 php 和 apache 相同的服务器上。

所以将 NGINX 设置在 80 端口上,将 apache 设置在 8080 上(并且只允许 nginx 连接,但如果您将其公开一段时间,请不要担心,因为它已经公开并且非常适合调试绕过 nginx,所以没有安全问题应该上升-但我建议您不要将其公开太久)。然后使 nginx 反向代理到 apache,缓存所有从 apache 卸载的静态文件(因为 nginx 代替它们服务)意味着 apache 可以执行更多 php 请求,并让 nginx 执行 OUTPUT COMPRESSION ;) 释放 apache 和 php 甚至更多的请求。作为一个额外的好处,nginx 还可以比 Apache 更快地提供静态文件,并且 Nginx 也使用更少的内存并且可以处理更多的连接。

即使是 nginx 新手也可以在在线阅读一些教程并在 1 天内完成我刚才说的所有内容后进行 nginx 设置。1 天也度过了愉快的时光。

但是请记住将 PHP 到 Apache 的输出缓冲保持打开,但在 PHP 上关闭 zlib 压缩并在 nginx 上启用它。

于 2012-10-25T18:30:48.813 回答