您的位置:首页 > 编程语言 > PHP开发

PHP中的错误处理&自定义错误处理方法

2015-11-01 22:36 549 查看
1.用户自定义错误

1)E_USER_ERROR

2) E_USER_WARNING

3) E_USER_NOTICE

2.E_ALL E_STRICT

E_ALL表示所有错误

E_STRICT代表严格性语法检查错误(某种语法是正确的,但是不建议使用)

3.错误的触发

1)正常触发

PHP自动处理

2) 人工触发

由程序员通过程序代码假设产生的一个错误

trigger_error("错误提示", 用户错误代号);

如: trigger_error("致命错误,未定义的函数调用", E_USER_ERROR);

4.错误的显示控制

网页中显示错误信息是可以控制的,有两种途径:

1)在php.ini文件中配置,对所有php文件都有效

2)在当前脚本文件中,只对当前脚本文件有效

错误的显示可以用两种方法控制

1)设定是否显示:display_errors

php.ini中的配置项:display_errors = on (off表示不显示)

2)脚本中配置:ini_set()

ini_set("display_errors", true); (也可以用数字1,同理0、false)

设定显示哪些级别的错误(用 位运算中 与& 或| 非~ 来灵活控制)

error_reporting = E_NOTICE
只显示E_NOTICE错误

error_reporting = E_NOTICE | E_WARNING
显示E_NOTICE和E_WARNING错误

error_reporting = E_NOTICE | E_WARNING | E_USER_ERROR
全部显示

error_reporting = E_ALL | E_STRICT
全部显示(建议使用这种)

关闭错误(类型于根据位值控制灯泡开关一样)

error_reporting = E_ALL | E_STRICT & ~E_NOTICE 关闭E_NOTICE错误显示

在代码中设定

iniset("error_reporting", E_ALL | E_STRICT & ~E_NOTICE)
只关闭E_NOTICE错误显示

ini_get("设定项名称");
用于获取某项的值

5.记录错误日志

开发阶段:显示所有错误

产品阶段:隐藏所有错误(写入错误日志)

1)php.ini文件中设定

log_errors = On
用于设定是否记录错误日志(~559~)

error_log = php_errors.log
用于设定记录错误日志的文件名(~643~)

默认路径就是当前运行脚本的文件夹

log_errors = syslog
不会记录错误日志,而是把错误写到操作系统日志中(控制面板-管理工具)

2)在当前脚本中设定(只在当前脚本有效)

ini_set("log_errors", On);

ini_set("error_log", 'error1.log');

ini_set("error_log", 'error1.txt');

ini_set("error_log", 'error1.html');

ini_set("error_log", syslog);

6.自定义错误处理

1)设定自定义处理错误的函数名

2)定义该函数

set_error_handler("MyError"); 函数指针

function MyError($errNo, $errMsg, $errFile, $errLine)

{

echo "发生错误:文件:$errFile 的第 $errLine 错误,错误号为:$errNo 错误信息为:$errMsg";

}

该函数由系统自己调用和传参,我的理解就类似一个回调函数,底层给我们抛上来一个接口,我们并不用关心底层

何时去调用这个函数,而我们只需要做的是根据自身实际需求去写自己的业务逻辑就行了。就比方银行给各大厂商

一个加密接口,而每个厂商去各自写自己的加密算法。业务和逻辑分离,降低耦合。

7.说明

1)一旦使用自定义错误程序,则系统不再处理错误

2)如果发生严重错误(E_ERROR, E_USER_ERROR)则立即会停止程序,并不会调用自定义错误处理程序

此时的系统错误处理工作会开始进行(对于严重错误,自定义错误处理函数是处理不了的)



2015-10-27 21:35:48

written by zhangshichuan
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: