Перехват PHP Fatal Error в Yii

Чтобы перехватить Fatal Error, нужно определить shutdown функцию, и проверять в ней тип ошибки.

function exception_shutdown()
{
    $error = error_get_last();

    if (is_array($error) != FALSE)
    {
        if (isset($error['type']) != FALSE)
        {
            if ($error['type'] == 1)
            {
                $exception = new ErrorException($error['message'], 0, $error['type'], $error['file'], $error['line']);

                Yii::app()->handleException($exception);
            }
        }
    }
}

register_shutdown_function('exception_shutdown');

К моменту вызова shutdown_function, перехват исключений Yii уже не работает, но все его классы доступны, а значит обработать ошибку можно вручную.

Делать подобный перехват ошибок хорошо тем, что в этом случае они будут обработаны как исключение, и значит будут записаны в лог ошибок приложения, или отправлены на e-mail администратору, в зависимости от настроек приложения.

comments powered by HyperComments