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

Dou*_*idy 2 php ajax output-buffering

我只是有一个实例,我正在执行 ob_clean(),然后在回显我的 json 之前进行 ajax 调用。问题是,当时我是 2 个级别的 ob,而 ob_clean() 只是清除内部 ob。为了清除它们,好吧,我只是做了

ob_clean();
ob_clean();
Run Code Online (Sandbox Code Playgroud)

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

编辑:是的,这个问题很相似,但另一个是关于冲洗的,我在谈论清洁。关于 end_clean、clean、get_clean 等,我有一些不明白的地方,因此,答案将与另一个不同且细微差别。

即:给定:

ob_start();
echo 'before';
ob_start();
echo 'second';
Run Code Online (Sandbox Code Playgroud)

while (ob_get_level()){
        ob_end_clean();
    }
Run Code Online (Sandbox Code Playgroud)

作品

while (ob_get_level()){
        ob_clean();
    }
Run Code Online (Sandbox Code Playgroud)

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

ob_clean();
ob_clean();
ob_clean();
ob_clean();
ob_clean();
Run Code Online (Sandbox Code Playgroud)

不起作用。(仍然回声: 'before' )

 ob_get_clean();
 ob_get_clean();
Run Code Online (Sandbox Code Playgroud)

作品

ob_end_clean();
ob_end_clean();
Run Code Online (Sandbox Code Playgroud)

作品

lxg*_*lxg 5

你可以简单地运行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;
Run Code Online (Sandbox Code Playgroud)