PHP - Почему эта фатальная ошибка не обнаруживается? - PullRequest
0 голосов
/ 04 мая 2011
function truExceptionHandler($no, $str, $file, $line) {
    if ($str != "Only variables should be assigned by reference") {
        echo '<br/><pre>';
        echo "<b>[ERROR] ".$str." in ".$file." on line ".$line."</b><br/>";
        print_r(debug_backtrace(2));
    }
}

set_error_handler('truExceptionHandler');

Моя функция не распознает ошибку Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\site.com\system\core\Common.php on line 328

Что мне нужно изменить, чтобы быть уверенным, что она обнаружена?

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Фатальная ошибка - фатальная. Вы не можете поймать это, PHP теперь DOA . В частности, эта ошибка является переполнением стека. В контексте переполнения стека не имеет смысла ожидать, что PHP создаст новый фрейм стека для вызова вашего обработчика ошибок.

2 голосов
/ 04 мая 2011

Обычно вы не можете поймать фатальную ошибку.Вот почему они называются фатальными ошибками.Но, если вы действительно хотите, есть маленький грязный хак, который вы можете использовать.Используйте register_shutdown_function.Функции выключения все еще вызываются после того, как произошла ошибка FATAL_ERROR.Например:

function onShutdown()
{
    $error = error_get_last();
    if (null !== $error && E_ERROR === $error['type']) {
        // A FATAL_ERROR occured
    }
}

register_shutdown_function('onShutdown');

Позвольте мне повторить, чтобы уточнить вопрос: Это грязный хак (но он работает)!

0 голосов
/ 04 мая 2011

Похоже, ошибка рекурсии.В основном это означает, что у вас есть 100 вызовов функций в стеке, т.е. если функция a1 вызывает функцию a2, которая вызывает функцию a3 ....... вызывает функцию a100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...