微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在调用未定义函数时没有PHP错误?

每当调用未定义的函数时,都不会记录错误.而是脚本停止执行.更糟糕的是,如果我运行PHP -l filename.PHP,它会显示没有语法错误.我正在使用自定义错误处理程序函数,但即使是第一行也永远不会到达.

调用未定义的函数时,如何让它运行我的错误处理程序?

我使用的是PHP 5.3.2-1.以下是设置错误处理程序的代码

error_reporting(-1);
$old_error_handler = set_error_handler( "userErrorHandler" );
set_exception_handler('exception_handler');

虽然它们确实适用于其他错误,但都没有到达错误处理程序和异常处理程序.

我想要这个的原因是我最终不得不在我的代码中放置调试语句以查看它在停止执行之前得到多远这是一个缓慢的过程,而错误消息会告诉我文件和行号错误是.

解决方法:

用户错误处理程序无法捕获致命错误.

http://php.net/manual/en/function.set-error-handler.php

特别是部分:

The following error types cannot be handled with a user defined
function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,
E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the
file where set_error_handler() is called.

根据PHP手册页上的注释,一个解决方法是测试shutdown函数中的错误

<?PHP
    error_reporting(E_ALL);
    ini_set('display_errors', 0);

    function shutdown(){
        $isError = false;
        if ($error = error_get_last()){
            switch($error['type']){
                case E_ERROR:
                case E_CORE_ERROR:
                case E_COMPILE_ERROR:
                case E_USER_ERROR:
                    $isError = true;
                    break;
            }
        }

        if ($isError){
            echo "Script execution halted ({$error['message']})";
        } else {
            echo "Script completed";
        }
    }

    register_shutdown_function('shutdown');
?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐