php - 如何判断ob_start();已经被调用

标签 php output-buffering

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

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

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

Warning: ob_start() [ref.outcontrol]: output handler 'ob_gzhandler' cannot be used twice in filename on line n

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

最佳答案

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作为处理程序不能像压缩已经压缩的数据那样。

关于php - 如何判断ob_start();已经被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010403/

相关文章:

php - UTF-8贯穿始终

php - 如何使用 Zend Framework 2 使用 Rest API

php - 输出缓冲区与 PHP 中的 file_get_contents

php - PHP/Apache 中的输出缓冲 block 如何工作?

php - 输出缓冲区时如何查看包含文件中的 php 错误?

无论缓冲区设置如何,PHP 命令行输出缓冲区输出

PHPMailer 无法发送邮件 - 以下发件人地址失败

PHP:使用 index.php 作为 Bootstrap 是否安全?

php - PDO::FETCH_ASSOC 返回 false

PHP ob_start : callback a static method with $this