[英]PHP - Why isn't this fatal error being caught?
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');
My above function isn't catching the error 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
我需要改变什么以确保它被捕获?
致命错误是致命的。 你抓不住它, PHP 现在是DOA 。 特别是,该错误是堆栈溢出。 在堆栈溢出的上下文中,期望 PHP 创建一个新的堆栈帧来调用您的错误处理程序是没有意义的。
通常,您无法捕获致命错误。 这就是为什么它们被称为致命错误。 但是,如果你真的想要,你可以使用一个肮脏的小技巧。 使用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');
让我重复一遍,把重点放在家里:这是一个肮脏的黑客(但它有效)!
听起来像一个递归错误。 It basically means you have 100 function calls on the stack ie if function a1 calls function a2 which calls function a3....... calls function a100.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.