我使用输出缓冲进行gzip压缩并访问以前在PHP脚本中输出的内容:
if(!ob_start("ob_gzhandler")) ob_start();
现在,如果该脚本包含在另一个已经使用ob_start()的脚本中,我会收到警告:
警告:ob_start()[ref.outcontrol]:输出处理程序'ob_gzhandler'在第n行的文件名中不能使用两次
所以我想测试已经被调用的ob_start()
。我认为ob_get_status()
应该是我需要的,但是在测试中使用它的最佳方法是什么?
答案 0 :(得分:14)
ob_get_level
返回活动输出控制处理程序的数量,ob_list_handlers
返回这些处理程序的提升。所以你可以这样做:
if (!in_array('ob_gzhandler', ob_list_handlers())) {
ob_start('ob_gzhandler');
} else {
ob_start();
}
虽然一般情况下你可以随意调用ob_start
,但使用ob_gzhandler
作为处理程序不能像压缩已经压缩的数据一样。
答案 1 :(得分:10)
if (ob_get_level())
echo "ob already started";
答案 2 :(得分:5)
一般:
if (ob_get_status()) {
// ob started
}
更具体
$status = ob_get_status();
if ($status['name']=='ob_gzhandler') {
// ob named ob_gzhandler started
}
答案 3 :(得分:3)
用这种方式怎么样?
if (ob_get_level() == 0) ob_start();