PHP退出并且仍然输出缓冲区
是否可以退出脚本,比如出现致命错误,但仍然输出我的缓冲区?我正在使用执行页眉/内容/页脚的模板系统。因此,我试图使其停止在 fatal_error()
函数上执行代码,但仍输出缓冲区模板(向用户发送错误消息,同时仍维护网站模板。 )我使用 ob_start("ob_gzhandler")
并在我的 fatal_error()
函数中使用 ob_flush()
并且最终出现白屏什么时候调用fatal_error()
。这是我的函数
function fatal_error($error_message, $log = true)
{
setup_error($error_message);
ob_flush();
exit();
}
setup_error()
告诉脚本将内容正文更改为错误消息(因此当错误发生时它不会解析 1/2 正文)。我浏览过的所有示例都说 ob_flush()
或 ob_end_flush()
可以实现这一点,尽管我没有任何运气。
Is it possible to exit the script, say on a fatal error and still output my buffer? I am using a template system that executes the header/content/footer. So I am trying to make it so it'll stop code executing on the fatal_error()
function but still output the buffer template (which sends out the error message to the user while still maintaining the website template.) I use ob_start("ob_gzhandler")
and in my fatal_error()
function I use ob_flush()
and I end up with a white screen when fatal_error()
is called. Here's my function
function fatal_error($error_message, $log = true)
{
setup_error($error_message);
ob_flush();
exit();
}
setup_error()
tells the script to change the content body to the error message (so it doesn't parse 1/2 the body when the error occurs). All the examples I've looked through says ob_flush()
or ob_end_flush()
can achieve this, though I'm not having any luck.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
set_error_handler()
函数。通过这种方式,您可以分配一个用户定义的函数(在您的例子中为fatal_error()
),以便在 PHP 遇到错误时执行。您可以在函数中执行任何您喜欢的操作,包括刷新缓冲区和退出。编辑:
以下代码应该执行您想要的操作:
编辑2:
您可以触发 E_ERROR 并因此测试
fatal_error()
函数,如下所示:Use the
set_error_handler()
function. This way you can assign a user-defined function, in your casefatal_error()
, to execute when PHP encounters an error. You can do whatever you like in your function, including flushing the buffer and exiting.EDIT:
The following code should do what you want:
EDIT 2:
You can trigger an E_ERROR and therefore test the
fatal_error()
function like so:我还尝试在
ob_flush()
之前添加对flush()
的调用。有时,两者都需要。I would try also adding a call to
flush()
before theob_flush()
. Sometimes, both are needed.