我刚看到这里的链接时遇到的问题几乎相同,但我想确保理解。这是链接: what is the role of ob_start() in here
所以,他的代码没有真正的“输出” - 没有回声,没有HTML,几乎没有。但他有一个ob_start。我和他一样,是传统代码,我的没有输出。它只是更新一些表。我在这个链接中看到的所有答案都解决了ob_start的实际功能 - 我认为只有一个解决了他的真正的问题,即“这个代码中ob_start的作用是什么?”。 那么,如果代码是“幕后”脚本,不输出html或回声或其他任何东西,输出缓冲区的东西是不是没用? 感谢
答案 0 :(得分:6)
不,它并非完全没用,因为那里的代码仍然可以通过错误产生输出。
One of the answers已经解决了这个问题:
这意味着如果他们中途输出页面并确定存在错误,他们可以清除缓冲区并输出错误页面。这也意味着在尝试发送HTTP标头时,您永远不会收到“无法发送标头,输出已启动”错误。
在该特定代码中,不应该有任何输出,但这并不意味着不能或者很容易搞砸并添加输出。如果display_errors
打开,任何函数调用的错误,警告和通知都可以添加输出。在PHP中有很多种产生输出的方法,因此ob_start
阻止它们实际将所有输出发送到响应。
如上所述,您可能希望这样做:
答案 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.