PHP提供了很多的错误等级,这里不一一罗列出来,有兴趣可以翻翻PHP的手册获取。本文主要是讲述在生产环境和开发环境中,错误的处理方式。
1 错误等级
在生产环境中建议 error_reporting(E_ALL ^ E_NOTICE) ,意义是除了notice,其他错误都会记录在案。
在开发环境中如果想严格控制错误,那么可以这样:error_reporting(E_ALL | E_STRICT); 这里几乎所有的错误都会记录,其实也可以和生产环境一致,notice不记录。
2 错误相关的配置(php.ini)
display_errors 是否展示错误,建议开发环境On,生产环境一定要Off,
log_errors 是否记录错误到日志文件中,建议开发环境On,如果你生产环境并发请求比较大,建议Off,当你生产环境出现莫名其妙的问题可以打开几分钟记录一下。
error_log 错误日志的文件路径,当log_errors为On的时候,出现错误的时候,会把错误记录到此文件中。
综上所述,建议在开发环境中如下配置
display_errors = On
log_errors = On
error_log = “/path/to/php/log/file”
生产环境中这样配置:
display_errors=Off
log_errors=Off #当需要定位问题的时候,可以改为On
error_log = “/path/to/php/log/file”
3 自定义错误处理方式
有时候需要对错误进行更加高级的处理,那么可以使用函数set_error_handler。如 set_error_handler(‘my_error_handler’),出现错误的时候会调用函数my_error_handler来处理,也可 以这样set_error_handler(array(‘eobj’,’emethod’)),这样的话,出现错误会调用eobj对象中的 emethod方法。这里要注意的是,如果你这样声明了自定义错误处理,那么如果你设置了日志记录的配置都不起错用,就是说出现错误了也不会记录到配置文 件中的error_log中,当然如果错误是致命错误,编译都没通过,那就会记录到error_log中。
有时候需要自己主动抛出错误的时候可以使用trigger_error。想象某个场景,你提供的某个接口需要一个关键的参数,而调用人确没有给或者 给的参数不符合要求,那么可以trigger_error(‘param $obj is not valid’); 更加详细的使用方法请参看手册
php.ini的相关默认设置如下:
转载请注明:jinglingshu的博客 » PHP中错误处理