【问题标题】:ob_clean() clean all levels of ob?ob_clean() 清除所有级别的ob?
【发布时间】:2015-08-12 21:40:14
【问题描述】:

我刚刚有一个实例,在回显我的 json 之前,我正在执行 ob_clean() 以进行 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();

作品

【问题讨论】:

  • 没有。由您来跟踪已启动的 ob 缓冲区的数量。这是为了防止“子”代码弄乱“父”代码建立的缓冲区。
  • 好的,我需要告诉你们:如果您像ob_start();include 'view.php';$out = ob_get_clean; 那样做,并且您的视图中有错误,它会搞砸您的缓冲区,并在您不想要的地方刷新,等

标签: php ajax output-buffering


【解决方案1】:

您可以简单地在while 循环中运行ob_get_level(),例如:

// 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2012-09-21
    • 2021-12-19
    相关资源
    最近更新 更多