PHP之自定义错误处理器
首先,什么是自定义错误处理器呢?其实简单易懂点就是我们在编程中自己定义的一种显示错误的信息。
那么废话不多说,先上一段代码,如下:
<?php
$fp = fopen("abc.txt", "r");
echo "ok";
?>之行代码,显示如下错误提示:
Warning: fopen(abc.txt): failed to open stream: No such file or directory in D:webtesterror2.php on line 2
ok
上面是一个默认情况下我们在之行error2.php文件后显示的一个错误信息,它里面默认之行的是php给我们设定好的错误显示信息,那么我们要如何来自定义错误函数显示呢?
创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 PHP 中发生错误时调用该函数。
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):
它的语法如下:
error_function(error_level,error_message,error_file,error_line,error_context)
详细的参数说明如下”
| 参数 | 描述 |
|---|---|
| error_level | 必需。为用户定义的错误规定错误报告级别。必须是一个值数。
参见下面的表格:错误报告级别。 |
| error_message | 必需。为用户定义的错误规定错误消息。 |
| error_file | 可选。规定错误在其中发生的文件名。 |
| error_line | 可选。规定错误发生的行号。 |
| error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
废话说了那么多,那么接下我们就使用自定义的一个错误函数来让他显示。
首先,我们需要定义一个自定义的错误函数,如下:
function my_error($errno,$errmsg){
echo "错误号:".$errno."<br>";
echo "错误信息:".$errmsg;
}my_error:函数名称,是我们自己定义的一个错误函数名称,你可以随便定义;
$errno:这是一个参数,代表错误号或者说错误级别,这个名称也是自己定义;
$errmsg:这是一个参数,代表错误信息,这个名称也是自己定义;
那么当然,光有一个自己定义的错误函数是不够的,我们还需要通过一个桥梁来桥接,那么这个时候需要用到一个php内部定义的一个桥接函数set_error_handler(),这个函数的详细官方给出的定义如下:
mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )
那么什么意思呢?
第一个参数的意思就是你自定义错误函数的函数名称;
第二个参数的意思就是指定一个错误的级别,这个级别在官方文档能够查到。例如:E_WARNING / E_USER_WARNING等。
如下表:
| 值 | 常量 | 描述 |
|---|---|---|
| 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 以外。
(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分) |
人,长得漂亮不如活的漂亮。