2011-04-19 126 views
7

我有使用输出缓冲有什么优点和缺点?

ob_start(); 

可以提高你的页面加载时间阅读在很多网站上,因为它存储在一个变量的PHP,并将其显示在一个去,而不是处理PHP一点的时间。

而且它是

header('location: /'); 

非常有用有人说,这是意大利面条的代码,但只要代码是简洁明了的任何程序员那么这不应该是一个问题,对不对?

你对使用它有什么想法,以及你对输出缓冲设置了什么,是否有利弊如何,何时以及为什么我应该或不应该使用它。

+1

关于第二个问题部分:[是否可以在所有PHP页面的开头都有“ob_start()”](http://stackoverflow.com/questions/4168009/is-it-ok-如果它的目的仅仅是为了防止头已经发送错误,它被广泛认为是黑客攻击。但是,这是一种功能性破解。请注意,可靠性取决于PHP是否隐式刷新(默认缓冲区大小可以取决于php.ini设置)。 – mario 2011-04-19 12:01:31

回答

-1

一些用户不知道PHP还有一些非常好的评论。所以他们错误地使用ob_start。

如果您使用header(),cookie()等头函数,则不必发送任何输出。这些功能必须从输出前使用。

但某些用户将停止使用ob_start或输出缓冲功能发送输出。

所以你可以使用JavaScript或元forwading转发用户。

<script language="javascript"> window.location = 'some.php'; </script> 

或者您可以使用元刷新转发用户。

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=some.php"> 

,如果你真的需要使用头功能,你必须不发送任何输出(不要忘了,输入字符或空间或UTF-8签名输出太)

+0

-1 - 使用'ob_start'作为防止输出发送的方法并没有错。但是,通常它可能会影响性能,并意味着在代码中存在分层问题。 – 2013-07-09 10:50:07

1

输出缓冲的主要优点是你可以将它与ob_gzhandler一起使用,这会压缩你的输出,所以你使用更少的带宽。如果你的服务器没有安装发送压缩的php文件,那么很好用。

另一个优点是,如果您的脚本使用数据库或其他受限资源,并且在关闭连接或释放这些资源之前有一些输出。相反,有这样的事情:

  1. 连接到数据库
  2. 开始发送输出给用户
  3. 等待用户接收一切
  4. 关闭数据库连接

你有:

  1. 开始缓冲
  2. 连接到数据库
  3. 输出一些事情
  4. 关闭数据库连接
  5. 发送缓冲区给用户。

当您的脚本需要连接100ms到数据库,并且您的用户需要300多次才能下载它时,您可以了解输出缓冲如何帮助释放对数据库连接限制的一些压力。

我知道使用配置良好的服务器编码的东西可能会使这些优势无效,但您永远不知道在您之后谁会编码,并且您并不总是能够控制运行的服务器。

相关问题