1

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

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

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

问候,

安茹

4

3 回答 3

6

PHP 有一个称为输出缓冲的特性。实现时,echo、print 或其他任何内容的输出将被缓冲,而不是直接进入 php 的输出。如果您需要在之后分析输出,甚至将其丢弃,这将非常有用。

正常使用可能类似于以下:

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

// ... more code

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

// 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();
}
于 2013-04-23T23:59:08.930 回答
1

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

同样可以写成

if (ob_get_level()) {
    ob_end_clean();
}
于 2013-04-23T23:56:51.667 回答
1

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

通常,您会知道您从输出缓冲区开始。在框架中,您不知道您的用户可能会对缓冲区做什么,所以首先检查一个活动的缓冲区。

于 2013-04-23T23:57:17.403 回答