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
我需要更改什么以确保它被抓住了?
答案 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。