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

php中的错误处理

2016-07-05 15:09 459 查看
手册中的位置:语言参考---异常处理

或者在w3c教程手册中的:服务器脚本/php高级/php错误处理(php异常处理)

如下代码:

[php] view
plain copy

$fp = fopen("a.txt","r");  

如果a.txt文件不存在,程序就会报告警告或者错误。所以为了程序的健壮性,应该先判断a.txt文件是否存在。

[php] view
plain copy

if(!file_exists("a.txt")){  

        echo "文件不存在";  

        exit();  

    }  

PHP处理错误的方式有以下几种:
1.die语句
2.自定义错误处理函数
3.自定义错误触发器
4.错误日志的方式

1.die语句

die语句终止简本,等价于exit语句,但是die可以输出提示语句。

如:

[php] view
plain copy

if(!file_exists("a.txt")){  

    die("文件不存在");  

}  

也可以写成

[php] view
plain copy

file_exists("a.txt") or die("文件不存在");  

die之后的语句不会被执行。

2.自定义错误处理函数(系统识别)

[php] view
plain copy

$fp=fopen("a.txt","r");  

对于这句代码,系统会打印出warning:.....这是系统默认的处理。我们可以通过自定义处理方式处理错误,而不是交由系统默认处理。
【补充】 php中的错误级别:

[php] view
plain copy

E_WARNING , E_NOTICE ,E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE, E_RECOVERABLE_ERROR , E_ALL  



自定义的错误处理函数必须至少接受2个参数(error level,error message),可最多接受5个参数,其余3个都为可选参数(file,line number,error context)。

[php] view
plain copy

function my_error($errno ,$errmsg){  

          

}  

通过set_error_handler("my_error",错误级别);让系统覆盖原来的默认处理函数,使用指定的函数处理指定错误级别的错误。

此处的错误级别一般为不以E_USER开头的错误级别。

这种处理方式是系统自动匹配识别出现错误属于哪种级别。

3.错误触发器(用户识别)

现有需求:如果年龄大雨120,则认为程序错误。

按照传统的方式:

[php] view
plain copy

if($age>120){  

        exit();  

}  

触发器方式:
先自定义错误触发器,错误触发器的定义和错误处理函数的定义相似,其参数一样,也是必须至少接受2个参数(error level,error message),可最多接受5个参数,其余3个都为可选参数(file,line number,error context)。

[php] view
plain copy

function my_error($errno,$errmsg){  

          

}  

再通过set_error_handler("my_error",错误级别)设置错误触发器触发级别以及处理函数。该处的错误级别一般是以E_USER开头的错误级别。
最后在程序中调用trigger_error("my_error",同时指定错误级别)。如果,指定的该错误级别与设置触发的级别不同,则不会触发错误处理函数;如果相同,才会触发错误处理函数。

[php] view
plain copy

function my_error($errno,$errmsg){  

          

    }  

      

    set_error_handler("my_error",E_USER_WARNING);  

      

    if($age>120){  

        trigger_error("my_error",E_USER_WARNING);//级别相同,会触发错误处理函数  

        trigger_error("my_error",E_USER_NOTICE);//级别不相同,不会触发错误处理函数  

    }  

这种处理方式是需要人工手动指定出现的错误的级别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: