在实际应用中,开发者当然不希望把自己开发的程序的错误暴露给用户,一方面会动摇客户对己方的信心,另一方面容易被攻击者抓住漏洞实施攻击,同时开发者本身需要及时收集错误,因此需要合理的设置错误显示与记录错误日志
一,错误显示设置
错误显示设置用于设置哪些错误该显示,以及该如何显示
在php中,其实有两种方式来设置当前脚本的错误处理方式
(一)php配置文件
在php.ini文件基于全局的配置,该文件下有两个参数
分别是error_reporting和display_errors,前者用于设置显示什么级别的错误,后者用于设置是否显示错误
(注:该知识点对网安SQL注入有意义,此处不细讲)
(二)php脚本中设置
error_reporting()
该函数可以在php脚本中调用,以设置错误的显示级别,需要传入一个错误代号(常量),见本篇【三】->php基础学习之错误处理(其一)-CSDN博客
例如传入0时,将不显示任何错误信息
当调用error_reporting()函数不传入参数时也是符合语法的,此时它将返回当前php脚本设置的错误级别
如下图所示:在上一篇【三.(六)】已经验证过各错误代号(常量)的具体值,其中E_ALL的值是32767对应的二进制数,E_NOTICE的值是8对应的二进制数,那么表达式【E_ALL & ~E_NOTICE】(该表达式的含义是除去NOTICE级别的错误)的结果正好是下面脚本的输出结果32759,说明error_reporting()函数返回的错误级别是正确的->php基础学习之错误处理(其一)-CSDN博客
ini_set()
和【一.(一)】本质是一样的,通过修改配置文件中的参数进行设置,但是脚本中的设置优先级比配置文件中的优先级更高(如果配置文件和脚本文件中的配置项不一致,以脚本中的配置优先),当然前提是脚本中的相关代码被执行
该函数有两个参数,第一个参数传入一个字符串(这个字符串就是配置项的名称),第二个参数传入该配置项对应的值
例如在上文提到的error_reporting,使用ini_set()函数设置显示
二,错误日志设置
在生产环境中无可避免会发生错误,但作为开发者又不希望展示给用户看,所以需要使用日志记录错误以便做出相应debug
参考本篇->如何配置使用php.ini中的错误日志功能? (newsn.net)
(一)开启日志功能
php日志功能的开关由参数【log_errors】决定,找到它并赋值为On
(二)指定路径
错误日志设置需要定义好error_log配置参数,并赋予该配置参数一个值(此值是一个.log文件的路径<注意路径的格式,一般用左斜杠>,将会保存程序测试或使用时发生的错误,如果需要关闭记录日志的功能,直接将此参数以及值注释或者删除即可)
(三)测试
(实际开发中一般将【display_errors】或【display_startup_errors】等参数设置为Off,这样在网页中就不会显示错误而是只将错误记录到日志文件中)