PHP学习笔记——错误处理
来源:互联网 发布:网络电影制作合同 编辑:程序博客网 时间:2024/05/22 14:21
PHP的错误处理
错误报告的级别
运行PHP脚本时,PHP解析器会尽其所能地报告其所遇到的问题。在PHP中错误报告的处理行为有PHP配置文件php.ini中相关的配置指令指定。PHP中有多个错误报告级别,可以通过设置错误报告级别,来控制错误报告的行为。
PHP中的 错误报告级别
开发人员希望在PHP脚本中显示某个级别 的错误时,必须先在php.ini文件中把display_error的值设置为On,开启错误报告功能。还可以通过ini_set()函数开启error_display
ini_set('display_error',1);//开启错误报告
注意:如果display_errors被启用,就会显示已满足设置级别的所有错误信息。但是,如果用户访问网站看到这些信息时,将会感到非常困惑。而且,泄露出来的服务器信息可能会给黑客利用,从而攻击网站。因此,在项目开发和调试期间,可以启用display_errors,但项目上线前,应把选择项设置为Off.
调整错误报告的级别
可以通过两种方法来该调整错误报告的级别:
1.修改配置文件php.ini
修改php.ini中,error_reporting的值,修改成功后,重启Web服务器,则每个PHP脚本都可以按调整后的错误级别输出错误报告。修改错误级别时,可以把位运算符(与、或、非)和错误级别常量一起使用。下面是示例:
;可以抛出任何非注意的错误error_reporting=E_ALL~E_NOTICE;只考虑运行时错误,解析错误和核心错误;error_reporting=E_ERROR|E_PARSE|E_CORE_ERROR;报告除用户错误之外的所有错误;error_reporting=E_ALL~(E_USER_ERROR|E_USER_WARNING|E_USER_NOTICE)
2.在PHP脚本中执行error_reporting()函数
可以在PHP脚本中执行error_reporting()函数,基于各个脚本,来设置错误报告级别。示例:
error_reporting(0)//关闭错误报告error_reproting(E_ALL);//将会向PHP报告每个错误
自定义错误处理
在开发的过程中,可以自定义错误的处理方式,完全绕过标准的PHP错误处理函数,这样可以按自己定义的格式打印错误报告。以下几种情况可以考虑使用自定义错误处理:
- 记录错误信息,以及时发现一些生产环境出现的问题。
- 用来屏蔽错误,避免把一些信息暴露给用户或者黑客
- 做相应的错误处理,例如跳转到预先定义好的错误页面,提供更好的用户体验。
通常使用set_error_handler()函数去设置用户自定义的错误处理函数,该函数用于设置运行期间用户的错误处理方法。该函数有两个参数,第一个是必须的,需要一个回调函数,规定发生错误时运行的函数。而这个回调函数需要设置四个参数,否则无效,按顺序分别是:错误等级、错误信息、错误文件、错误行号。set_error_handler()函数的第二个参数是可选的,用于规定哪个错误报告级别会显示用户自定义的错误。默认是”E_ALL”。示例:
<?phperror_reporting(0);/** 错误处理函数,作为set_eror_handler()函数的第一个参数”回调“ @parm int $error_level 错误级别 @parm string $error_message 错误信息 @parm string $error_file 错误所在文件 @parm int $error_line 错误所在行数**/function error_handler($error_level,$error_message,$file,$line){ $EXIT=FALSE; switch($error_level){ case E_NOTICE: $error_type='Notice'; break; case E_WARNING: $error_type='Warning'; break; case E_USER_WARNING: $error_type='User Warning'; break; case E_ERROR: $error_type='Error'; break; case E_USER_ERROR: $error_type='User Error'; $EXIT=TRUE; break; case E_PARSE: $error_type='User Error'; $EXIT=TRUE; break; default: $error_type='unknow'; $exit=TRUE; } echo $error_type. ' in line'. $line.'<br>'; if($EXIT==TRUE) //跳转到另一个脚本} set_error_handler('error_handler'); echo $novar;//使用未定义变量,报notice echo 3/0;//除以0,报Warning trigger_error('triger error',E_USER_ERROR);//自己定义一个错误?>
运行结果如图所示:
所有的打印错误都是按照自己定义的格式输出的(当然,你完全可以不把错误的类型以及出现的位置显示出来),不过有一点,系统直接报Fatal Error这里捕获不到,因为系统不会把这么重大的错误交给你处理。除此之外,E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被这个句柄处理的。另外,使用set_error_handler()函数后,所有的错误都会交给自定义的函数处理。
使用set_error_handler()函数可以使错误提示更加美观,配合网站的风格,使用户界面更加友好。
- PHP学习笔记——错误处理
- php学习笔记——错误异常处理及路径问题
- JavaScript学习笔记——错误处理
- JavaScript学习笔记——错误处理
- PHP学习笔记(五)错误和异常处理
- php学习笔记(十二)错误与异常处理
- Java学习笔记——通过异常处理错误
- Swift学习笔记系列——(17)错误处理
- 学习笔记——PHP数据的相关处理
- PHP 学习笔记(四):高级教程:Cookies,Sessions,邮件,错误处理,异常处理,过滤器
- 学习笔记之错误处理
- 【Python学习笔记】错误处理
- 学习笔记_错误处理
- python学习笔记 错误处理
- PHP学习笔记:会话处理
- PHP字符串处理学习笔记
- PHP文件处理 ~~学习笔记
- 《php和mysql web开发》笔记——第7章 错误和异常处理
- TabLayout+ViewPager 实现 PagerIndictor
- Spring aop execution 表达式
- JDBC使用Dao工厂模式读取properties配置文件实现解耦
- 多个 ng-app 中 Controllers & Services 之间的通信
- 开发板系统安装准备
- PHP学习笔记——错误处理
- Scrum Master与Project Manager的区别
- codevs 全排列 1294
- Permutations II
- Mysql自动设置时间(自动获取时间,填充时间)
- 抓取 题目描述 生成 解题报告 模板 python
- 洛谷 P1282 多米诺骨牌
- 大大维的游戏机计划2--一个自制的类似2048的小游戏
- cvCreateVideoWriter生成AVI视频时返回为空问题的终极解决方案