我的目标是尽早刷新网站的标题部分,而我的PHP脚本将页面的其余部分拼接在一起并在完成后发送。重要的是,块被压缩发送到浏览器。 (我使用的是Apache / 2.2和PHP / 5.3.4)
现在我试图通过在我的PHP脚本中调用ini_set(“zlib.output_compression”,“On”)来实现这一目的。但是如果我在脚本中的任何地方使用flush(),即使在最后压缩也不再有效。
问题是:
a)通过使用此方法,一旦达到此输出缓冲区的大小,zlib将刷新输出缓冲区并将压缩块发送到浏览器?
b)如果是这样,当zlip只通过设置zlib的内部缓冲区大小来发送我的块而不是时,有什么方法可以精确控制?默认值为4KB。
c)是否有任何好的替代品可以实现早期压缩冲洗,可能会更精确地控制我想要冲洗的时间?也许我完全走错了路。:)答案 0 :(得分:1)
这是一段很长的时间,因为我不得不在OB上使用zlib压缩(更多关于为什么以后)。但是,让我试着说服你在PHP中关闭OB上的zlib压缩。首先,确保我们在同一页面上的一些背景知识。
OB如何工作
每次php打印一些东西,没有OB它会直接发送到apache,从apache发送到浏览器。相反,对于OB,输出在apache处停止并等待直到数据被刷新(到浏览器)或直到脚本结束并且数据被自动刷新。这通过缓存Apache到Web浏览器阶段来生成页面时节省了大量的时间和资源。
为什么不在PHP中使用OB压缩
为什么要让PHP压缩它?应该是服务器工作来完成这样的任务(例如压缩js文件)。你应该做什么来彻底免费apache来处理php是为了向公众安装NGINX。设置为反向代理非常容易,您甚至可以将它作为php和apache安装在SAME服务器上。
所以在端口80上设置NGINX,把apache放在8080上(并且只允许nginx连接,但是不要担心,如果你把它公开一段时间,因为它已经公开并且非常适合调试绕过nginx所以没有安全问题应该上升 - 但我建议你不要长期公开。然后使nginx反向代理到apache,缓存从apache卸载的所有静态文件(因为nginx代替它们)意味着apache可以做更多的php请求,并且还得到nginx来执行OUTPUT COMPRESSION;)释放apache和php来做甚至更多要求。作为一个额外的好处,nginx还可以比Apache更快地提供静态文件,而Nginx也可以使用更少的ram并且可以处理更多的连接。
即使是nginx新手也可以在网上阅读一些教程后获得nginx设置,并在1天内完成我刚才所说的一切。也花了1天时间。
请记住保持输出缓冲ON然而对于PHP到Apache但在PHP上关闭zlib压缩并在nginx上启用它。