在之前的文章中,我们了解了PHP中异常和错误的区别,简单介绍了PHP中的一些错误处理函数。这次我们再开两篇文章,详细介绍PHP中一些错误处理相关的函数。如果想了解错误和异常,请前往:一起了解PHP错误和异常(1)一起了解PHP错误和异常(2)一起了解PHP错误和异常(3)error_reporting()这个函数一定要多或者大家不太熟悉的,就是定义PHP在运行时的错误处理机制。就像我们在调试的时候,经常需要设置一个E_ALL来显示所有的错误信息。错误报告(E_ALL);该函数只能定义为PHP提供的错误处理常量,包括:FatalError:fatalerror(scriptterminated)E_ERROR//Fatalrunningerror,错误无法恢复,暂停脚本执行E_CORE_ERROR//FatalerrorduringinitializationatPHPstartupE_COMPILE_ERROR//编译时的致命错误,如E_ERRORE_USER_ERROR//Zend脚本引擎生成的自定义错误消息。像使用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)ParseError:编译时解析错误,语法错误(脚本终止)E_PARSE//编译时语法解析错误WarningError:警告错误(仅提示信息,脚本不要终止操作)E_WARNING//运行时警告(非致命错误)。E_CORE_WARNING//PHP初始化和启动期间发生的警告(非致命错误)。E_COMPILE_WARNING//编译警告E_USER_WARNING//用户产生的警告信息NoticeError:通知错误(只给出通知信息,脚本不终止运行)E_NOTICE//运行时通知。指示脚本遇到可能显示为错误的情况。E_USER_NOTICE//用户产生的通知信息。当然这个功能也可以通过php.ini文件进行全局配置,具体配置方法这里不再赘述。详细说明也包含在php.ini文件的注释中。error_get_last()error_get_last()函数指的是返回我们最后的错误信息。它返回一个数组,里面会包含错误信息的“类型”、“消息”、“文件”、“行”信息,方便我们查看错误的具体位置和内容。回声$a;//Notice:Undefinedvariable:aprint_r(error_get_last());//Array//(//[type]=>8//[message]=>Undefinedvariable:a//[file]=>/Users/zhangyue/MyDoc/blogarticle/dev-blog/php/202004/source/一些简单的错误处理函数(1).php//[line]=>5//)echo$b;print_r(error_get_last());//不打印$a//Array//(//[type]=>8//[message]=>Undefinedvariable:b//[file]=>/Users/zhangyue/MyDoc/Blogarticle/dev-blog/php/202004/source/一些简单的错误处理函数(1).php//[line]=>17//)echo$a;echo$b;print_r(error_get_last());//同样的问题,只打印$b。需要注意的是,它只返回最后一条错误信息。例如,echo$a;并回显$b;在上面例子的最后一段中,两者都会产生错误,但只有echo$b;产生的错误信息;最后会打印出来。error_clear_last从名字就可以看出,这个函数的作用是清除最后一条错误信息。也就是说,如果在发生错误的代码之后调用此函数,error_get_last()将不会打印任何内容。回声$a;//注意:未定义的变量:aerror_clear_last();print_r(error_get_last());//不会输出error_log最后,我们来看一个错误记录的函数。它不仅可以将日志记录到日志文件,还可以直接发送邮件。error_log("TestErrorOne!");//php.ini中定义的error_log文件//[22-Apr-202009:04:34Asia/Shanghai]TestErrorOne!error_log("TestErrorOne!",1,"423257356@qq.com");echo$a;error_log(base64_encode(json_encode(error_get_last())),1,"423257356@qq.com");第一段我们只有一个参数,所以错误信息会直接Log到php.ini文件中定义的错误日志中。接下来的两段将内容发送到邮箱。该函数的声明形式为:error_log(string$message[,int$message_type=0[,string$destination[,string$extra_headers]]]):bool$message,错误信息内容,文本形式$message_type,错误发送to其中,默认0为系统日志文件,1发送到$destination定义的邮件地址,3发送到$destination定义的邮件地址并且$message不会被视为换行,4发送到SAPIloghandler$destination,一般是邮件地址$extra_headers,extraheaders,当$message_type为1时有用这个函数需要注意的是$message的内容不能有null或者其他可能截断字符的符号。所以在我们的测试代码中,在发送error_get_last()内容的时候,我们不仅将其转成json,还加了一层base64编码,以保证内容的正常发送。综上所述,本文主要介绍这些针对错误情况的处理函数。更令人惊讶的是error_log()函数。它不需要太多的配置,直接通过PHP自带的邮件发送邮件就可以了。或许在我们的生产环境中,我们可以尝试用它来监控和跟踪一些错误!!测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/%E4%B8%80%E4%BA%9B%E7%AE%80%E5%8D%95%E7%9A%84%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86%E5%87%BD%E6%95%B0%EF%BC%88%E4%B8%80%EF%BC%89.php参考文档:https://www.php.net/manual/zh/function.error-reporting.phphttps://www.php.net/manual/zh/function.error-get-last.phphttps://www.php.net/manual/zh/function.error-clear-last.phphttps://www.php.net/manual/zh/function.error-log。php============各媒体平台均可搜索【硬核项目经理】
