当前位置: 首页 > 后端技术 > PHP

开发模式和生产模式的PHP错误处理

时间:2023-03-30 01:08:49 PHP

程序错误总是不可避免的,虽然我们在写代码的时候格外小心。在开发php程序的时候,我们希望在遇到php错误的时候能够第一时间展示给我们,方便调试。当程序开发完成并成为正式产品时,我们希望在错误日志中记录意外的错误信息,而不是将这些错误信息显示给用户,因为用户很可能会利用这些来暴露脚本路径、数据库信息或其他错误信息做一些破坏性的黑客攻击。PHP错误处理PHP脚本在执行过程中遇到错误,将作为错误处理。有些错误会在报错后终止脚本继续执行,有些则不会。有关详细信息,请参阅手册。php的错误处理方式基于以下配置选项。这些配置可以在代码中声明和设置,也可以在php.ini文件中设置。如果您不需要经常更改这些配置,建议将它们设置在php.ini文件中,以使您的代码更干净、更简洁。#是否向浏览器/命令行界面打印错误信息#开发模式建议开启,生产模式强烈建议关闭ini_set('display_errors','On');#是否将错误信息记录到日志中#在开发模式和生产模式下建议开启ini_set('log_errors','On');#指定错误消息日志文件。如果启用了log_errors选项,记得指定日志文件位置#确保执行php脚本的系统用户对该文件有写权限,否则日志无法写入ini_set('error_log','/usr/local/php/errors.log');#这个选项用来设置错误报告的级别#相当于error_reporting(E_ALL)#不管开发模式还是生产模式建议开启E_ALL(报告所有错误信息)#这个选项也需要在产品中设置模式,因为display_errors被关闭,log_errors被打开#所以浏览器/命令行界面不会因为这个ini_set('error_reporting',E_ALL)而暴露错误信息;此外,PHP还为开发者提供了在代码中将自定义错误信息记录到错误日志文件的内置函数:boolerror_log(string$message[,int$message_type=0[,string$destination[,string$extra_headers]]])必选参数为message,调用该函数会将message写入php.ini中定义的error_log文件。用户自定义错误处理此外,如果用户注册,用户可以使用函数:mixedset_error_handler(callable$error_handler[,int$error_types=E_ALL|E_STRICT])以自定义方式处理脚本运行时出现的错误error_handler和error_types如果指定了,那么当出现这些error_types的错误时,会绕过php的标准错误处理程序(即不输出错误信息,也不记录错误信息日志),但是handler中的error_handler将被执行。该功能的详细使用方法请参考手册,