0

我试图捕捉 Zend Framework 应用程序中发生的致命错误。我试图从引导程序中调用 register_shutdown_function:

protected function _initErrorHandler()
{
    register_shutdown_function(array("My_ErrorHandler", 'shutdownHandler'));
}

然后,在 My_ErrorHandler 中,我编写了一个函数:

<?php
class My_ErrorHandler
{
    static function shutdownHandler()
    {
        die('here');
    }
}

这行不通。我对 set_error_handler 进行了同样的尝试,它可以工作。但是,最后一个函数无法捕获致命错误。

你是我想念的吗?

谢谢

4

1 回答 1

3

我设法使它工作。

事实上,它是有效的,但这不是很“友好”。die('here') 被击中,但在浏览器中显示致命错误之后。

所以我发现了致命错误,然后重定向到标准 Zend Framework 错误控制器,结果如下:

<?php
class My_ErrorHandler
{
    /** 
     * Catch all errors within the Applications
     * @see Bootstrap
     */ 
    static function shutdownHandler()
    {
        $e = error_get_last();
        if (!is_null($e) && $e['type'] == E_ERROR) { //fatal error

            //log
            Zend_Registry::get('log')->err($e['message']);

            //Redirect to error page
            $redirector = new Zend_Controller_Action_Helper_Redirector();
            $redirector->gotoSimple('error', 'error', null, array('error_handler' => 'fatal'));
        }
    }
}

希望它会帮助别人;)

感谢@Jon、@Richard Parnaby-King 和@ficuscr 的帮助。

注意:尽量保持shutdownHandler() 尽可能轻:它被称为每个页面显示。

于 2012-08-22T07:41:08.393 回答