php基础学习之错误处理(其二)

在实际应用中,开发者当然不希望把自己开发的程序的错误暴露给用户,一方面会动摇客户对己方的信心,另一方面容易被攻击者抓住漏洞实施攻击,同时开发者本身需要及时收集错误,因此需要合理的设置错误显示与记录错误日志


一,错误显示设置

错误显示设置用于设置哪些错误该显示,以及该如何显示

在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,这样在网页中就不会显示错误而是只将错误记录到日志文件中)

相关推荐
luck_0072 小时前
PhpSpreadsheet 导出excel 找不到setCellValueByColumnAndRow
php
生椰拿铁You2 小时前
解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题
php
索然无味io7 小时前
跨站请求伪造之基本介绍
前端·笔记·学习·web安全·网络安全·php
伟大无须多言8 小时前
企业资源规划系统(ERP)服务器上线项目实施指南
开发语言·php
网络安全(king)8 小时前
网络安全设备
网络·web安全·php
蜗牛hb13 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
手可摘星河13 小时前
php中 cli和cgi的区别
开发语言·php
EasyDSS14 小时前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
liuyunshengsir15 小时前
Squid代理服务器的安装使用
开发语言·php
007php0071 天前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程