5

我刚刚在这里看到了一个与我遇到的问题几乎相同的链接,但我想确保我理解。这是链接: ob_start() 在这里的作用是什么

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

4

2 回答 2

6

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

其中一个答案已经解决了这个问题:

这意味着如果他们在输出页面的过程中发现错误,他们可以清除缓冲区并改为输出错误页面。这也意味着您在尝试发送 HTTP 标头时永远不会收到“无法发送标头,输出已经开始”错误。

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

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

  • 完全抑制输出
  • 防止以后调用设置 HTTP 标头时出错(这要求尚未发送任何输出)。
于 2013-09-11T21:05:59.113 回答
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.
于 2013-09-11T21:03:19.913 回答