PHP 哎呀错误句柄清除缓冲区



Issue

在过程脚本中,PHP Whoops Pretty Page 处理程序内容将与应用程序缓冲区输出中的部分内容混合。 哎呀可能出现在隐藏的 html 标记中,也可能显示为混乱或输出。

问题

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

以下解决方案适用于我:

在脚本的最早点,也许只有在调试或开发人员模式下,就像我所做的那样,你需要做:

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

然后你宣布哎呀我做到了:

if(DEVELOPER_DEBUG === true)
{
$_whoops = new WhoopsRun();
$_whoops->pushHandler(function(){
ob_clean();
});
$_handler = new WhoopsHandlerPrettyPageHandler();
$_whoops->pushHandler($_handler);
$_whoops->register();
}

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

为什么有效

ob_start() 可以多次调用,缓冲区刷新清除函数需要调用与按顺序调用 start 的次数相同。

通过使您的应用程序启动自己的缓冲区,它使其成为可以清除的资源,Whoops 也始终启动它自己的缓冲区,因此通过注册处理程序来清除第一个缓冲区(您的应用程序),然后在发生错误时,Whoops 可以清除以前的缓冲区。

缓冲液控制

例如,每次调用ob_start创建一个增量缓冲区。

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

如果调用一次,则只会清除或刷新在声明下一个ob_start之前生成的内容。

可以适应 OOP。

最新更新