PHP哎呀错误处理清除缓冲区

时间:2017-05-22 08:17:40

标签: php error-handling whoops

问题

在过程脚本中,PHP Whoops Pretty Page处理程序内容将与应用程序缓冲区输出中的部分内容混合在一起。 哎呀可以在隐藏的html标签中出现乱码或输出。

问题

如何在Whoops处理程序缓冲区之前清除前一个缓冲区?

1 个答案:

答案 0 :(得分:0)

以下解决方案工作人员:

  

在脚本的最早阶段,也许只有在DEBUG或DEVELOPER模式下,你需要这样做:

if(DEVELOPER_DEBUG === true)
    ob_start();

然后你宣布我做过的Whoops:

if(DEVELOPER_DEBUG === true)
{
    $_whoops = new \Whoops\Run();

    $_whoops->pushHandler(function(){
        ob_clean();
    });

    $_handler = new \Whoops\Handler\PrettyPageHandler();
    $_whoops->pushHandler($_handler);
    $_whoops->register();
}

这在我的程序脚本用例中完美无缺,可以在Whoops启动它自己的输出之前清除任何初始生成的缓冲区。

为什么会有效

ob_start()可以被多次调用,缓冲区 flush clear 函数需要调用与start依次调用相同的次数。

通过让你的应用程序启动它自己的缓冲区,它使它成为一个可以被清除的资源,Whoops总是启动它自己的缓冲区,所以通过注册一个处理程序来清除第一个缓冲区(你的应用程序)然后发生错误时,Whoops可以清除之前的缓冲区。

缓冲区控制

例如,每次调用 ob_start 增量缓冲区都会被创建。

如果你调用ob_start 3次,你需要调用ob_flush 3次才能输出所有缓冲的内容。

如果您调用它一次,您将只清除或刷新在宣布下一个ob_start之前生成的内容。

可以适应OOP。