当没有输出时,ob_start是无用的吗?

时间:2013-09-11 20:58:44

标签: php ob-start

我刚看到这里的链接时遇到的问题几乎相同,但我想确保理解。这是链接: what is the role of ob_start() in here

所以,他的代码没有真正的“输出” - 没有回声,没有HTML,几乎没有。但他有一个ob_start。我和他一样,是传统代码,我的没有输出。它只是更新一些表。我在这个链接中看到的所有答案都解决了ob_start的实际功能 - 我认为只有一个解决了他的真正的问题,即“这个代码中ob_start的作用是什么?”。 那么,如果代码是“幕后”脚本,不输出html或回声或其他任何东西,输出缓冲区的东西是不是没用? 感谢

2 个答案:

答案 0 :(得分:6)

不,它并非完全没用,因为那里的代码仍然可以通过错误产生输出。

One of the answers已经解决了这个问题:

  

这意味着如果他们中途输出页面并确定存在错误,他们可以清除缓冲区并输出错误页面。这也意味着在尝试发送HTTP标头时,您永远不会收到“无法发送标头,输出已启动”错误。

在该特定代码中,不应该有任何输出,但这并不意味着不能或者很容易搞砸并添加输出。如果display_errors打开,任何函数调用的错误,警告和通知都可以添加输出。在PHP中有很多种产生输出的方法,因此ob_start阻止它们实际将所有输出发送到响应。

如上所述,您可能希望这样做:

  • 完全取消输出
  • 防止以后调用设置HTTP标头的错误(需要已发送 输出)。

答案 1 :(得分:1)

我相信它会允许您抑制所有输出,例如,从错误消息中删除,并将它们转储到错误文件中。如果您要在某个时刻在响应中发送标头,并且不希望错误输出到它的消息,这将特别有用。

例如:

<?php

ob_start();

//Do something that would generate a warning or notice.
//Output some headers
header("Content-type: application/json"); //This would fail if output had already been sent to the browser.

$contents = ob_get_contents();

//write contents to an error file or something.