ob_get_level

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

ob_get_level返回输出缓冲机制的嵌套级别

描述

ob_get_level(): int

返回输出缓冲机制的嵌套级别。

参数

此函数没有参数。

返回值

返回嵌套输出缓冲处理程序的级别,如果输出缓冲未激活,则返回 0。

警告

ob_get_level()ob_get_status() 之间相同级别的值相差 1。对于 ob_get_level(),第一级为 1。而对于 ob_get_status(),第一级为 0

参见

添加备注

用户贡献备注 5 则备注

匿名
12 年前
对于对在脚本开始时从 ob_get_level 获取“1”作为返回值感到困惑的用户:这可能意味着 PHP ini 指令“output_buffering”未设置为关闭/0。如果此指令未关闭,PHP 会自动为所有脚本启动输出缓冲(这就像在脚本的第一行调用 ob_start 一样)。

如果您的脚本可能最终位于任何服务器上,并且您不希望最终用户必须配置他们的 INI,您可以在脚本的开头使用以下代码来停止输出缓冲(如果它已经启动):
<?php
if (ob_get_level()) ob_end_clean();
?>

或者,如果您始终希望在脚本的开头拥有输出缓冲,可以使用相反的操作:
<?php
if (!ob_get_level()) ob_start();
?>
匿名
9 年前
这可以用来在使用输出缓冲渲染视图时正确处理异常,该视图可能使用也可能不使用输出缓冲

<?php

function getView($view)
{
$level = ob_get_level();

ob_start();

try
{
include
$view;
}

catch (
Exception $e)
{
while (
ob_get_level() > $level)
{
ob_end_clean();
}

throw
$e;
}

return
ob_get_clean();
}
bonzini at gnu dot org
20 年前
即使在较旧的 PHP 版本中,您也可以使用以下代码来确定输出缓冲是否处于活动状态(即 ob_get_level() > 0):

<?php $ob_active = ob_get_length () !== FALSE ?>

Paolo
mark dot richards at massmicro dot com
12 年前
有人指出 ob_get_level() 在启动缓冲之前报告 1,在 php 5.3.6-13 中我确认了这一点

<?php
echo ob_get_level(); // --> 1
?>

似乎输出缓冲的内部计数器需要初始化。为了正确地启动,这似乎可以做到

<?php
ob_end_clean
();
echo
ob_get_level(); // --> 0
?>
匿名
19 年前
有时,ob_get_level() 可能会有 1 的偏差,因为在脚本开始时,即使从未调用过 ob_start(),它也会返回 1(并且可以通过 ob_end_clean() 等方法清除输出缓冲,不会出现错误)。因此,第一个 ob_start() 将拥有 ob_get_level() 为 2,第二个将为 3,依此类推。

我不确定这是否是 PHP 5 的问题,还是与服务器是否设置为 gzip 所有 html 文档有关。

此外,至少在 PHP 5.0.4(当前版本)之前,ob_get_level() 始终在析构函数中返回 0。发生这种情况是因为在调用析构函数之前,输出缓冲的垃圾回收已经完成。如果您想在脚本退出之前对对象中的输出缓冲执行某些操作,使用带有 ob_start() 的回调函数是可行的方法。
To Top