最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 一些简单的错误处理函数(一)

    正文概述 转载于:掘金(硬核项目经理)   2021-04-06   682

    在之前的文章中,我们了解过了 php 中的异常和错误的区别,也简单地介绍了一些 PHP 中的错误处理函数。这次,我们再开两篇文章,详细的介绍一些 PHP 中错误处理相关的函数。想了解错误和异常相关内容的,请移步:

    • 一起搞懂PHP的错误和异常(一)
    • 一起搞懂PHP的错误和异常(二)
    • 一起搞懂PHP的错误和异常(三)

    error_reporting()

    这个函数相必大家多少都会接触过,就是定义 PHP 在运行时的错误处理机制。就像我们在进行调试时,往往需要设置一个 E_ALL 来显示全部的错误信息。

    error_reporting(E_ALL);
    

    这个函数只能定义为 PHP 内部提供的那些错误处理的常量,包括:

    • Fatal Error:致命错误(脚本终止运行)

      • E_ERROR // 致命的运行错误,错误无法恢复,暂停执行脚本
      • E_CORE_ERROR // PHP启动时初始化过程中的致命错误
      • E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
      • E_USER_ERROR // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)
    • Parse Error:编译时解析错误,语法错误(脚本终止运行)

      • E_PARSE //编译时的语法解析错误
    • Warning Error:警告错误(仅给出提示信息,脚本不终止运行)

      • E_WARNING // 运行时警告 (非致命错误)。
      • E_CORE_WARNING // PHP初始化启动过程中发生的警告 (非致命错误) 。
      • E_COMPILE_WARNING // 编译警告
      • E_USER_WARNING // 用户产生的警告信息
    • Notice Error:通知错误(仅给出通知信息,脚本不终止运行)

      • E_NOTICE // 运行时通知。表示脚本遇到可能会表现为错误的情况.
      • E_USER_NOTICE // 用户产生的通知信息。

    当然,这个函数也是可以通过 php.ini 文件进行全局配置的,具体的配置方式这里不再赘述。包括 php.ini 文件的注释中也会有详细的说明。

    error_get_last()

    error_get_last() 函数则是指的返回我们最后一次的错误信息。它返回的是一个数组,里面会包含错误信息的"type"、"message"、"file"、"line"信息,方便我们查看错误的具体发生位置及内容。

    echo $a; // Notice: Undefined variable: a
    print_r(error_get_last());
    // Array
    // (
    //     [type] => 8
    //     [message] => Undefined variable: a
    //     [file] => /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/一些简单的错误处理函数(一).php
    //     [line] => 5
    // )
    echo $b;
    print_r(error_get_last()); // 不会打印$a的问题
    // Array
    // (
    //     [type] => 8
    //     [message] => Undefined variable: b
    //     [file] => /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/一些简单的错误处理函数(一).php
    //     [line] => 17
    // )
    
    echo $a;
    echo $b;
    print_r(error_get_last()); // 同样只会打印$b的问题
    

    需要注意的是,它只返回最后一个错误的信息。比如上面示例中最后一段中的 echo a;echoa; 和 echo a;和echob; 都会产生错误,但最终打印出来的只是 echo $b; 所产生的错误信息。

    error_clear_last

    从名字就可以看出,这个函数的作用是清除最后一次的错误信息。也就是说,如果在发生错误的代码之后调用了这个函数, error_get_last() 就不会打印任何内容了。

    echo $a; // Notice: Undefined variable: a
    error_clear_last();
    print_r(error_get_last()); // 不会输出
    

    error_log

    最后我们来看看错误日志记录的一个函数。它不仅可以将日志记录到日志文件中,还可以直接发邮件。

    error_log("Test Error One!");
    // php.ini 中定义的 error_log 文件
    // [22-Apr-2020 09:04:34 Asia/Shanghai] Test Error One!
    
    error_log("Test Error One!", 1, "423257356@qq.com");
    
    echo $a;
    error_log(base64_encode(json_encode(error_get_last())), 1, "423257356@qq.com");
    

    第一段我们只有一个参数,所以错误信息将直接记录到 php.ini 文件中所定义的错误日志中。而后面两段则是将内容发送到一个邮箱中。

    这个函数的声明形式是:

    error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool
    
    • $message,错误信息内容,文本形式
    • messagetype,错误发送到何处,默认0系统日志文件,1为发送到message_type,错误发送到何处,默认0系统日志文件,1为发送到 messaget​ype,错误发送到何处,默认0系统日志文件,1为发送到destination 定义的邮件地址,3发送到 destination定义的邮件地址并且destination 定义的邮件地址并且 destination定义的邮件地址并且message 不会被当作新的一行,4发送到SAPI的日志处理程序中
    • $destination,一般为邮件地址
    • extraheaders,额外的邮件头,在extra_headers,额外的邮件头,在 extrah​eaders,额外的邮件头,在message_type 为1时有用

    这个函数需要注意的一点是, $message 内容不能有 null 或者其他可能截断字符的符号。所以我们的测试代码中,发送 error_get_last() 内容时我们不仅给他转成了 json ,而且还加了一层 base64 编码,这样才能保证内容的正常发送。

    总结

    这篇文章主要就是介绍了这几个针对错误情况发生时的处理函数。比较有惊喜的是 error_log() 这个函数,它不需要过多的配置,直接就可能通过 PHP 自带的 mail 进行邮件发送。或许在我们的生产环境中可以尝试用来来进行一些错误的监听跟踪哦!!

    测试代码:

    github.com/zhangyue050…

    参考文档:

    www.php.net/manual/zh/f… www.php.net/manual/zh/f… www.php.net/manual/zh/f… www.php.net/manual/zh/f…


    起源地下载网 » 一些简单的错误处理函数(一)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元