【问题标题】:Using include() within ob_start()在 ob_start() 中使用 include()
【发布时间】:2011-12-15 04:07:26
【问题描述】:

这里需要一点 PHP 帮助,包含的内容显示为“1”,这意味着它是真实的,但需要它的内容才能出现,我不确定为什么它不是。这是一个函数的简化版本:

public function content {
    $website->content = 'Some content here. ';
    ob_start();
    include('myfile.php');
    $file_content = ob_end_clean();
    $website->content .= $file_content;
    $website->content .= ' Some more content here.';
     echo $website->content;
}

这个输出:

这里有一些内容 1 这里还有一些内容

当我需要它输出时:

这里有一些内容 '此处包含的文件内容' 这里还有一些内容

有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: php


    【解决方案1】:

    尝试使用ob_get_clean() 而不是ob_end_clean()

    两者都清除当前缓冲区,但ob_end_clean() 返回一个布尔值,而ob_get_clean() 返回当前缓冲区的内容。

    【讨论】:

      【解决方案2】:

      不要使用ob_end_clean 将现有代码修改为类似于下面的内容

      ob_start();
      
      include('myfile.php');
      
      $file_content = ob_get_contents();
      
      ob_end_clean ();
      

      我不投票给ob_get_clean 的原因是因为我曾经有过其他开发人员对实际发生的事情感到困惑的时候,函数名称并没有真正说明输出缓冲将在调用后结束.

      我认为该功能容易出现进一步的错误,因此使用ob_start/ob_end_clean更容易理解并且更好地用于将来的代码维护。

      在多行代码和更易于理解的代码之间进行权衡是非常值得的。

      【讨论】:

        【解决方案3】:

        您应该使用ob_get_clean(),而不是ob_end_clean()。前者返回一个输出缓冲区的字符串并清空它,而后者只是清空并返回一个布尔值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 2011-05-23
          • 2013-10-08
          • 1970-01-01
          • 2019-03-19
          • 1970-01-01
          相关资源
          最近更新 更多