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。