在ob_start()中使用include()

时间:2011-12-14 19:33:34

标签: php

在这里需要一些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;
}

输出:

Some content here 
1 
Some more content here

当我需要输出时:

Some content here
'Included file content here'
Some more content here

我知道如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

尝试使用ob_get_clean()代替ob_end_clean()

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

答案 1 :(得分:3)

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

ob_start();

include('myfile.php');

$file_content = ob_get_contents();

ob_end_clean ();

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

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

在一行额外代码之间进行权衡,但更容易理解的代码是值得的。

答案 2 :(得分:2)

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