如何确定更好的ob_start(); 已被称为

C.O*_*.O. 13 php output-buffering

我使用输出缓冲进行gzip压缩并访问以前在PHP脚本中输出的内容:

if(!ob_start("ob_gzhandler")) ob_start();
Run Code Online (Sandbox Code Playgroud)

现在,如果该脚本包含在另一个已经使用ob_start()的脚本中,我会收到警告:

警告:ob_start()[ref.outcontrol]:输出处理程序'ob_gzhandler'不能在第n行的文件名中使用两次

所以我想测试ob_start()已经被称为.我认为ob_get_status()应该是我需要的,但在测试中使用它的最佳方法是什么?

Gum*_*mbo 14

ob_get_level返回活动输出控制处理程序的数量,并ob_list_handlers返回这些处理程序的提升.所以你可以这样做:

if (!in_array('ob_gzhandler', ob_list_handlers())) {
    ob_start('ob_gzhandler');
} else {
    ob_start();
}
Run Code Online (Sandbox Code Playgroud)

虽然一般情况下你可以调用ob_start你想要的任意次数,但是使用ob_gzhandler处理程序不能像压缩已经压缩的数据一样.


And*_*ist 10

if (ob_get_level())
    echo "ob already started";
Run Code Online (Sandbox Code Playgroud)


Cra*_*ent 5

一般:

if (ob_get_status())  {
  // ob started
}
Run Code Online (Sandbox Code Playgroud)

更加具体

$status = ob_get_status();
if ($status['name']=='ob_gzhandler') {
 // ob named ob_gzhandler started
}
Run Code Online (Sandbox Code Playgroud)