PHP退出并且仍然输出缓冲区

发布于 2025-01-05 05:00:18 字数 588 浏览 0 评论 0原文

是否可以退出脚本,比如出现致命错误,但仍然输出我的缓冲区?我正在使用执行页眉/内容/页脚的模板系统。因此,我试图使其停止在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨的味道风的声音 2025-01-12 05:00:18

使用set_error_handler()函数。通过这种方式,您可以分配一个用户定义的函数(在您的例子中为 fatal_error()),以便在 PHP 遇到错误时执行。您可以在函数中执行任何您喜欢的操作,包括刷新缓冲区和退出。

编辑:

以下代码应该执行您想要的操作:

set_error_handler('fatal_error', E_ERROR, E_USER_ERROR);

function fatal_error($errno, $errstr, $errfile, $errline)
{
    ob_flush();
    exit();
}

编辑2:

您可以触发 E_ERROR 并因此测试 fatal_error() 函数,如下所示:

trigger_error('This is a test error', E_ERROR);

Use the set_error_handler() function. This way you can assign a user-defined function, in your case fatal_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:

set_error_handler('fatal_error', E_ERROR, E_USER_ERROR);

function fatal_error($errno, $errstr, $errfile, $errline)
{
    ob_flush();
    exit();
}

EDIT 2:

You can trigger an E_ERROR and therefore test the fatal_error() function like so:

trigger_error('This is a test error', E_ERROR);
甜点 2025-01-12 05:00:18

我还尝试在 ob_flush() 之前添加对 flush() 的调用。有时,两者都需要。

I would try also adding a call to flush() before the ob_flush(). Sometimes, both are needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文