个人博客
专注IT梦想的地方

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_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官方网站学习都是可以的,这里就不再一一介绍了。

赞(0) 打赏
未经允许,不得转载本站任何文章:智言个人博客 » PHP之自定义错误处理器

评论 1

评论前必须登录!

 

  1. 人,长得漂亮不如活的漂亮。

    身材超棒的9年前 (2015-10-07)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏