首先,什么是自定义错误处理器呢?其实简单易懂点就是我们在编程中自己定义的一种显示错误的信息。
那么废话不多说,先上一段代码,如下:
<?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 的一部分) |
所以我们可以通过set_error_handler()函数来桥接到我们的自定义错误函数上,如下:
//通过php函数set_error_handler来将错误显示信息桥接到我们自己定义的函数上 set_error_handler("my_error",E_WARNING);
此时我们通过浏览器运行之前的error2.php文件,发现,显示的错误信息为如下内容了:
错误号:2
错误信息:fopen(abc.txt): failed to open stream: No such file or directory
ok
所以这就变成了我们自己定义的一个错误处理器,当然,还有更多的大家可以在w3school上学习或者php官方网站学习都是可以的,这里就不再一一介绍了。
人,长得漂亮不如活的漂亮。