PHP的ob_start可以被调用一次吗?

时间:2009-07-29 04:30:47

标签: php

PHP的ob_start可以被调用一次吗?

很抱歉,如果这是一个愚蠢的问题,但我真的不知道。

我的网站真的很大(文件数量),它的社交网络和其中一个包含的文件使用ob_start PHP的输出缓冲区的东西,我不是很久以前别人开始我的网站而现在它是我的我需要更多地研究它,看看它到底在做什么。

无论如何我想使用ob_start(“ob_gzhandler”);压缩CSS文件,我的网站上的所有文件都通过索引文件加载(包含),所以我想知道我是否能够使用它,即使它已经在代码中的其他地方使用了吗?

2 个答案:

答案 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来服务这些文件的另一个好处是,它可以更容易地让它们由另一台服务器提供服务,因为您的网站将会增长(如果它实际上增长得足够的话):

  • 你可以拥有一堆“PHP服务器”来处理PHP页面
  • 和一个或两个“静态文件服务器”,只为服务器提供CSS / JS /图像,并减轻负载或“应用程序服务器”;在这些上不需要PHP;你也可以使用像lighttpd而不是Apache
  • 这样的东西


话虽如此,ob_start说:

  

输出缓冲区是可堆叠的,即   你可以在另一个时调用ob_start()   ob_start()处于活动状态。请确保   你调用ob_end_flush()了   适当的次数。如果   多输出回调函数   活动,输出正在过滤   顺序通过它们中的每一个   嵌套顺序。

所以,我认为你的问题的答案是“是”: - )