15

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

if(!ob_start("ob_gzhandler")) ob_start();

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

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

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

4

4 回答 4

16

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

if (!in_array('ob_gzhandler', ob_list_handlers())) {
    ob_start('ob_gzhandler');
} else {
    ob_start();
}

虽然通常您可以调用ob_start任意次数,但使用ob_gzhandleras handler 不能像压缩已经压缩的数据一样。

于 2011-05-15T18:47:11.683 回答
11
if (ob_get_level())
    echo "ob already started";
于 2011-05-15T18:43:06.880 回答
6

一般的:

if (ob_get_status())  {
  // ob started
}

更详细

$status = ob_get_status();
if ($status['name']=='ob_gzhandler') {
 // ob named ob_gzhandler started
}
于 2011-05-15T18:45:09.473 回答
3

以这种方式使用它怎么样?

if (ob_get_level() == 0) ob_start();

于 2011-05-15T18:43:26.257 回答