PHP的ob_start可以被调用一次吗?
很抱歉,如果这是一个愚蠢的问题,但我真的不知道。
我的网站真的很大(文件数量),它的社交网络和其中一个包含的文件使用ob_start PHP的输出缓冲区的东西,我不是很久以前别人开始我的网站而现在它是我的我需要更多地研究它,看看它到底在做什么。
无论如何我想使用ob_start(“ob_gzhandler”);压缩CSS文件,我的网站上的所有文件都通过索引文件加载(包含),所以我想知道我是否能够使用它,即使它已经在代码中的其他地方使用了吗?
答案 0 :(得分:15)
是的,您可以多次调用它。但是每次都会创建一个新的缓冲区,所以要小心。
从manual:“输出缓冲区是可堆叠的,也就是说,你可以调用ob_start()而另一个ob_start()是活动的。只需确保你调用ob_end_flush()适当的次数。如果多个输出回调函数处于活动状态,输出按嵌套顺序依次按顺序进行过滤。“
答案 1 :(得分:2)
你这样说:
我想使用
ob_start
("ob_gzhandler");
来压缩CSS 文件
我宁愿服务和压缩JS / CSS(好的,静态的)文件是Web服务器(即Apache)的工作,而不是PHP。
关于这一点,你可以看一下mod_deflate
- 至少,如果你使用的是Apache 2。
我网站上的所有文件都已加载 (包括在内)通过索引文件
真的有必要吗?你正在使用PHP,没有明显的(?)原因。
(请注意,即使CSS / JS文件是通过PHP提供的,Apache也应该能够使用mod_deflate
来压缩它们; HTML,JSON也是如此... ...顺便说一下)< / em>的
不通过PHP来服务这些文件的另一个好处是,它可以更容易地让它们由另一台服务器提供服务,因为您的网站将会增长(如果它实际上增长得足够的话):
话虽如此,ob_start
说:
输出缓冲区是可堆叠的,即 你可以在另一个时调用ob_start() ob_start()处于活动状态。请确保 你调用ob_end_flush()了 适当的次数。如果 多输出回调函数 活动,输出正在过滤 顺序通过它们中的每一个 嵌套顺序。
所以,我认为你的问题的答案是“是”: - )