PHP和ob_end_clean函数

时间:2013-04-23 23:54:08

标签: php

我看看PHP - Laravel 框架源代码,在他们的error.php文件中,我找到了这一行。

**ob_get_level() and ob_end_clean();**

只是想知道上面代码的目的是什么?

的问候,

anru

3 个答案:

答案 0 :(得分:5)

PHP有一个名为output buffering的功能。这意味着echo和print的输出或其他不直接输出到php的输出,它将被缓冲。如果您之后需要分析输出,或者事件将其丢弃,这将非常有用。

通常你会这样使用:

ob_start();
echo "bla bla ...";

// ... more code

// grab contents of the output buffer
$content = ob_get_contens();

// analyze it ...
if(content_looks_good($content)) {
    ob_end_flush();
} else {
    echo "bad content";
    ob_end_clean(); // throw buffer contents away
}

然而,这只是一个例子。输出缓冲有更多用法示例。


您显示的代码会抛出缓冲区内容。我不知道原因,因为我不知道你引用了哪些代码。

语法说明:

ob_get_level()将返回输出缓冲区的当前嵌套级别。如果大于零,php将使用该值作为布尔值true,因此执行清除缓冲区的ob_end_clean()

与以下陈述相同,可能更好理解:

if(ob_get_level() > 0) {
    ob_end_clean();
}

答案 1 :(得分:1)

这意味着“如果某些东西已经缓冲 - 清除缓冲区”

同样可以写成

if (ob_get_level()) {
    ob_end_clean();
}

答案 2 :(得分:1)

“如果ob_get_level()返回'truthy'值(不是0但更高),则输出缓冲区处于活动状态,让它结束并丢弃它的内容。”

通常,你知道你开始使用输出缓冲区。在框架中,您不知道用户可能对缓冲区执行的操作,因此请首先检查活动缓冲区。