【问题标题】:PHP exit and still output bufferPHP退出并仍然输出缓冲区
【发布时间】:2012-02-11 20:57:06
【问题描述】:

是否可以退出脚本,比如出现致命错误并仍然输出我的缓冲区?我正在使用执行页眉/内容/页脚的模板系统。所以我试图让它停止在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() 可以实现这一点,尽管我没有任何运气。

【问题讨论】:

    标签: php output-buffering


    【解决方案1】:

    使用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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗯,还是只输出白屏
      • 糟糕,模板直到ob_flush 之后才输出。我看过了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多