【问题标题】:Is ob_start useless when there is no output?没有输出的时候ob_start没用吗?
【发布时间】:2013-09-11 20:58:43
【问题描述】:

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

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

【问题讨论】:

    标签: php ob-start


    【解决方案1】:

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

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

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

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

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

    • 完全禁止输出
    • 防止在以后调用设置 HTTP 标头时出错(这要求已发送 no 输出)。

    【讨论】:

    • 这基本上是我写的,但你收到了赞成票,而我没有 =]。爱如此。
    • 我将所有错误发送到另一个程序。因此,出于我的目的,或者作为一个理论练习,如果您不发送输出,答案听起来像“是的,它无用”。我投了你一票。
    【解决方案2】:

    我相信它可以让您抑制所有输出,例如,来自错误消息的输出,并将它们转储到错误文件中。如果您打算在某个时候在响应中发送标头,并且不希望错误输出与它一起发送消息,这将特别有用。

    例如:

    <?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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多