【问题标题】:Check whether content already sent in PHP检查内容是否已经在 PHP 中发送
【发布时间】:2009-04-17 11:59:44
【问题描述】:

有没有一种聪明的方法来检查输出是否已经发送到浏览器并且发送标头会生成 PHP_WARNING?

显然有使用输出缓冲区的替代方法,但这并不总是一种选择。

【问题讨论】:

    标签: php http-headers


    【解决方案1】:

    您可以使用 headers_sent() 方法。这是因为在输出任何内容之前,将首先发送标头。

    【讨论】:

      【解决方案2】:

      headers_sent() 做得很差,并且在输出已发送的情况下并不总是返回 TRUE(例如通知和警告)。

      作为替代,我使用这个:

      <?php
      
      $obStatus = ob_get_status();
      
      if ($obStatus['buffer_used'] > 0) {
          echo 'Content was sent';
      } else {
          echo 'Content was NOT sent';
      }
      

      【讨论】:

      • xdebug 生成通知和警告时这是正确的
      【解决方案3】:

      如果您只想隐藏警告,只需关闭error reporting

      $old_er = error_reporting(0);
      
      header(...)
      
      error_reporting($old_er);
      

      或者,您可以将 PHP 错误和警告重定向到日志文件(这在生产中更可取,IMO)。

      【讨论】:

        猜你喜欢
        • 2021-09-13
        • 1970-01-01
        • 2021-08-08
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多