繁体   English   中英

PHP - 为什么没有发现这个致命错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM