error
在PHP中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息
错误处理
在创建脚本和Web应用程序时,错误处理是一个很重要的部分,如果你的代码缺少错误检测编码,那么程序就很不专业
错误处理方法为
- 简单的”die()”语句
- 自定义错误和错误触发器
- 错误报告
die()函数
打开文本文件1
2
$file=fopen("welcome.txt","r");
如果文件不存在就会得到类似错误1
2Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in /www/runoob/test/test.php on line 2
为了避免以上错误,访问之前检测该文件是否存在1
2
3
4
5
6
7
8
9
if(!file_exists("welcome.txt"))
{
die("文件不存在");
}
else
{
$file=fopen("welcome.txt","r");
}
运行结果1
文件不存在
自定义错误处理器
创建自定义的错误处理器非常多,很简单地创建一个专用函数,可以在PHP中发生错误时调用该函数
该函数必须要有能力处理两个参数(error level和eroor message),可以最多接受五个参数
语法1
2error_function(error_level,error_message,
error_file,error_line,error_context)
参数 | 描述
- | -
error_level | 必需。为用户定义的错误规定错误报告级别。必须是一个数字。
error_message | 必需。为用户定义的错误规定错误信息
error_file | 可选。规定错误发生的文件名
error_line | 可选。规定错误发生的行号
error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值
错误报告级别
用户自定义的错误处理程序处理的不同类型的错误
值 | 常量 | 描述 |
---|---|---|
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,但可被用户定义的处理程序捕获 |
8191 | E_ALL | 所有错误和警告 |
现在创建一个处理错误的函数1
2
3
4
5function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "脚本结束";
die();
上面的代码就是一个简单的错误处理函数,当它被触发时,它会取得错误级别和错误消息。然后它会输出错误级别和消息,并终止脚本
设立错误处理程序
对于所有错误来使用我们自定义的错误处理程序1
set_error_handler("customError");
set_error_handler()仅需要一个参数,可以添加第二个参数来规定错误级别
1 |
|
触发错误
在脚本中用户输入数据的位置,当用户的输入无效时触发错误是很有用的,这个任务由trigger_error()函数完成
1 |
|
运行结果1
2Notice: 变量值必须小于等于 1
in /www/test/runoob.php on line 5
该例子是”test” 变量大于 “1”,就会发生错误
还可以添加的第二个参数,您能够规定所触发的错误类型
1 |
|
运行结果1
2Error: [512] 变量值必须小于等于 1
脚本结束
错误记录
默认的情况下,根据php.ini中的error_log配置,向服务器的记录系统或文件发送错误记录。通过error_log()函数,可以向指定的文件或远程目的地发送错误记录
通过E-Mail发送错误消息
1 |
|
运行结果1
2Error: [512] 变量值必须小于等于 1
已通知网站管理员
接收自以上代码地邮件如下所示1
Error: [512] 变量值必须小于等于 1
这个方法不适合所有的错误。常规错误应当通过使用默认的 PHP 记录系统在服务器上进行记录
总结
1.直接使用die()函数来在遇到错误时终结程序运行,往往有时候是不太好的
2.set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别
3.触发错误使用trigger_error()函数来进行触发
4.set_error_handler(error_handler,error_type)其中error_handler是必须的,并且要与错误处理函数名称保持一致,error_type是可选项,可以设置错误级别
5.通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录