ob_clean()清除所有级别的ob?

时间:2015-08-12 21:40:15

标签: php ajax output-buffering

我刚刚有一个实例,我在做一个ob_clean(),然后回应我的json,进行ajax调用。问题是,当时我是2级ob,并且ob_clean()只清除内部ob。为了清除它们,我刚刚做了

ob_clean();
ob_clean();

清除所有当前缓冲区的正确方法是什么?

编辑:是的,这个问题很相似,但另一个问题是关于冲洗,我正在谈论清洁。有一些我没有得到关于end_clean,clean,get_clean等的东西,因此,答案将与另一个不同并且细致入微。

智慧: 给出:

ob_start();
echo 'before';
ob_start();
echo 'second';

while (ob_get_level()){
        ob_end_clean();
    }

作品

while (ob_get_level()){
        ob_clean();
    }

导致无限循环,最终超时。

ob_clean();
ob_clean();
ob_clean();
ob_clean();
ob_clean();

不起作用。 (仍然是回声:'之前')

 ob_get_clean();
 ob_get_clean();

作品

ob_end_clean();
ob_end_clean();

作品

1 个答案:

答案 0 :(得分:4)

您只需在ob_get_level()循环中运行while,例如:

// put this line at the beginning of your script
// to disable auto-buffering through output_buffering ini directive
if (ob_get_level()) ob_end_clean();

ob_start();
ob_start();
ob_start();
ob_start();

$out = '';

while (ob_get_level())
{
    echo ob_get_level()."\n";
    $out .= ob_get_clean();
}

echo $out;