PHP - 为什么不会发现这个致命的错误?

时间:2011-05-04 02:31:12

标签: php codeigniter error-handling

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 个答案:

答案 0 :(得分:3)

致命错误是致命的。你无法抓住它,PHP现在是DOA。特别是,该错误是堆栈溢出。在堆栈溢出的上下文中,期望PHP创建一个新的堆栈帧来调用错误处理程序是没有意义的。

答案 1 :(得分:2)

通常你不会发现致命的错误。这就是他们被称为致命错误的原因。但是,如果你真的想要,你可以使用一个肮脏的小黑客。使用register_shutdown_function。发生FATAL_ERROR后仍会调用关机功能。 E.g:

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

register_shutdown_function('onShutdown');

让我重复一下,把重点放在家里:这是一个肮脏的黑客(但它有效)!

答案 2 :(得分:0)

听起来像递归错误。它基本上意味着你在堆栈上有100个函数调用,即如果函数a1调用函数a2,它调用函数a3 .......调用函数a100。