【问题标题】:why do I need to end my ob_start()?为什么我需要结束我的 ob_start()?
【发布时间】:2010-11-08 11:36:18
【问题描述】:

php 文档建议我应该以 ob_end_flush() 结束每个 ob_start()。我在网站的每个页面上都使用一个,只是为了允许我在应用程序的任何位置使用 firephp 日志方法。

该应用程序运行良好,但我想知道是否有任何我不知道的可能有害的东西。

【问题讨论】:

    标签: php ob-start


    【解决方案1】:

    我认为这个建议的原因是,当不使用ob_end_* 函数之一时,PHP 会隐式刷新您的输出缓冲区。虽然这不是错误,但 可能会在意料之外的情况下导致问题。 PHP 文档试图保护您免受此类问题的影响。如果您知道隐式刷新,这可能不是问题。

    【讨论】:

      【解决方案2】:

      您可以将输出缓冲用作

      <?php
      ob_start();
      echo "Some text you want to echo on page!!";
      header("Location:somepage.php");
      ob_end_flush();
      ?>
      

      问题是我们开始发送输出后无法发送标头。为了解决这个问题,我们缓冲输出。函数 ob_start 打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送输出(除了标题),而是将输出存储在内部缓冲区中。所以回显输出将被缓冲。接下来我们发送标题没有任何问题,因为我们还没有吐出任何输出。最后我们调用 ob_end_flush 来刷新内部缓冲区内容并停止输出缓冲。

      【讨论】:

        【解决方案3】:

        如果有循环,例如,有人可以开始缓冲。并调用你的函数。当他试图 ob_end_flush 代码收集你的内容时。

        【讨论】:

          猜你喜欢
          • 2012-05-21
          • 2019-06-09
          • 2021-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多