php处理错误的三种方式: 简单的die()语句; 自定义错误和错误触发器;错误日志;
1,简单的die()语句
if(!file_exists("aaa.txt")){ die("文件不存在"); }else{ $fp = fopen("aaa.txt","r"); }
上面的代码和下面的代码功能相同
file_exists("aaa.txt") or die("文件不存在!"); $fp = fopen("aaa.txt","r");
2,自定义错误和错误触发器
php自带错误处理器,可以自己编写错误处理器。
(2.1)创建一个自定义的错误函数非常简单,我们可以创建一个专用函数,在PHP发生错误时候调用该函数。该函数必须有能力处理至少两个参数(error level 和error message),但是可以接受最多五个参数(可选的file,line-number以及error context):
(2.2)基本语法:error_function(error_level,error_message,error_file,error_line,error_context)
(a),编写错误函数。
(b),编写set_error_handler(),通知php系统,弃用默认错误处理器,使用自定义的错误函数。
(2.3)PHP中有不同的错误级别控制
值 |
常量 |
描述 |
2 |
E_WARNING |
非致命的run-time错误,不暂停脚本运行。 |
8 |
E_NOTICE |
Run-time通知,脚本发现可能有错误发生,但也可能在脚本正常运行时发生。 |
256 |
E_USER_ERROR |
致命的用户生成的错误,这类似于程序员使用PHP函数trigger_error()设置的E_ERROR。 |
512 |
E_USER_WARNING |
非致命的用户生成的错误,这类似于程序员使用PHP函数trigger_error()设置的E_WARNING。 |
1024 |
E_USER_NOTICE |
用户生成的通知,这类似于程序员使用PHP函数trigger_error()设置的E_NOTICE。 |
4096 |
E_RECOVERABLE_ERROR |
可捕获的致命错误,类似E_ERROR,但可被用户定义的处理程序捕获。(参见set_error_handler()) |
8191 |
E_ALL |
所有错误和警告,除级别E_STRICT以外。(在PHP6.0,E_STRRICT是E_ALL的一部分。) |
(2.4)语法错误,set_error_handler()错误控制案例,此处错误适应于E_WARNING,E_NOTICE,E_RECOVERABLE_ERROR,E_ALL。
//定义了一个函数 function my_error($errno,$errmes){ echo "<font size='5' color='red'>$errno.$errmes</font>"; exit(); } //改写set_error_handler处理器 set_error_handler("my_error",E_WARNING); //定义了一个函数 function my_error1($errno,$errmes){ echo "<font size='5' color='red'>$errno.$errmes</font>"; exit(); } //改写set_error_handler处理器 set_error_handler("my_error1",E_NOTICE); $fp=fopen("aa.txt","r");
(2.5)逻辑错误,trigger_error()错误控制案例,这个可以在代码中编写程序,排除逻辑错误情况,没有必要使用trigger_error()。
$age = 700; if($age > 120){ //调用触发器 trigger_error("输入年龄过大"); exit(); }
自定义一个错误处理函数(和上类似),此处适用于E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE。
function my_error3($errno,$errmes){ echo "错误号是:".$errno; } set_error_handler("my_error3",E_USER_ERROR);//此处适用于E_user_ERROR,E_user_WARNING,E_user_NOTICE $age = 700; if($age > 120){ trigger_error("输入年龄过大",E_USER_ERROR); }
3,PHP错误日志
基本方法使用error_log(),使用方法如下,执行完如下代码,会在代码页所在的文件夹产生myerr.txt这个文件。
function my_error3($errno,$errmes){ $err_info = "错误号是:".$errno; echo $err_info; date_default_timezone_set("Asia/Chongqing"); error_log("时间是".date("Y-m-d G-i-s")."--".$err_info." ",3,"myerr.txt"); } set_error_handler("my_error3",E_USER_ERROR);//此处适用于E_user_ERROR,E_user_WARNING,E_user_NOTICE $age = 700; if($age > 120){ trigger_error("输入年龄过大",E_USER_ERROR); }