PHP退出并仍然输出缓冲区

时间:2012-02-11 20:57:06

标签: php output-buffering

是否可以退出脚本,比如致命错误并仍然输出我的缓冲区?我正在使用执行标题/内容/页脚的模板系统。所以我试图这样做,以便它停止在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()都可以达到此目的,但我没有运气。

2 个答案:

答案 0 :(得分:4)

使用set_error_handler()功能。这样,您可以在PHP 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);

答案 1 :(得分:2)

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