PHP和ob_end_clean函数

anr*_*ru 1 php

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

**ob_get_level() and ob_end_clean();**
Run Code Online (Sandbox Code Playgroud)

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

问候,

anru

hek*_*mgl 5

PHP有一个称为输出缓冲的功能.这意味着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
}
Run Code Online (Sandbox Code Playgroud)

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


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

语法说明:

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

它与以下声明相同,可能更好理解:

if(ob_get_level() > 0) {
    ob_end_clean();
}
Run Code Online (Sandbox Code Playgroud)