Отладка PHP Fatal Error в Yii

Помечено: , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 3 нед. назад.

  • Автор
    Сообщения
  • #5310
    @admin

    По умолчанию Yii не обрабатывает Fatal Error от PHP, поэтому приходилось постоянно лезть в лог, и смотреть на ошибки там.

    Причина, по которой Yii не может обработать фатальные ошибки заключается в том, что PHP принципиально не вызывает функции, установленные set_error_handler(), при возникновении ошибок типа E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING. Исправляем это:

    <?php class FatalErrorApplication extends CWebApplication { 
        public function __construct($config=null) { 
            parent::__construct($config);
            register_shutdown_function(array($this, 'shutdown')); 
        } 
        public function shutdown() { 
            if (YII_ENABLE_ERROR_HANDLER && ($error = error_get_last())) {
                $this->handleError($error['type'], $error['message'], $error['file'], $error['line']);
                exit();
             }
        }
     }

    И не забываем это подключать в index.php (или с чего там у вас собирается сайт):

    require_once(dirname(__FILE__). '/protected/components/FatalErrorApplication.php'); 
    Yii::createApplication('FatalErrorApplication', $config) ->runEnd('frontend');

Для ответа в этой теме необходимо авторизоваться.