作者:dmcm0006 | 来源:互联网 | 2017-05-13 02:31
在php开发中我们一般会使用php自带的错误处理方法来处理一些错误,但是有些我们需要自定义一些错误处理机制来解决系统自带不能解决的问题。
基本的错误处理:使用 die() 函数
第一个例子展示了一个打开文本文件的简单脚本:
代码如下 |
|
$file=fopen("welcome.txt","r");
?> |
如果文件不存在,您会获得类似这样的错误:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:webfoldertest.php on line 2为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:
代码如下 |
|
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
|
现在,假如文件不存在,您会得到类似这样的错误消息:
File not found比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。
不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。
下面我们来看一个自定错误处理函数
代码如下 |
|
function myErrorHandler($errno, $errstr, $errfile, $errline){
if(!(error_reporting() &$errno)){return;}
switch ($errno){
case E_USER_ERROR:
echo "My ERROR [$errno] $errstr ";
echo "错误行:$errline 在文件:$errfile之中 ";
echo " PHP版本: " .PHP_VERSION ." (" .PHP_OS .") ";
break;
case E_USER_WARNING:
echo "My WARNING [$errno] $errstr ";
break;
case E_USER_NOTICE:
echo "My NOTICE [$errno] $errstr ";
break;
default:
echo "Unknown error type: [$errno] $errstr ";
break;
}
return true;
}
function trigger_test($age){//抛出错误的测试函数
if($age <= 0 || $age > 999) trigger_error("年龄不合法:$age岁", E_USER_ERROR);
if($age <18) trigger_error("未成年:$age岁", E_USER_WARNING);
if($age > 40 && $age <100) trigger_error("年龄稍大:$age岁", E_USER_NOTICE);
}
//如果只是简单统一地处理错误:
$errorHandler = set_error_handler("myErrorHandler");
trigger_test(1000);//会抛出一个error级的错误
function myError($errno, $errstr, $errfile, $errline){
print_r(func_get_args());
//具体处理方法
}
function myWarning($errno, $errstr, $errfile, $errline){
print_r(func_get_args());
//具体处理方法
}
function myNtice($errno, $errstr, $errfile, $errline){
print_r(func_get_args());
//具体处理方法
}
|
//如果要分别处理不同错误级别:
代码如下 |
|
set_error_handler('myError',E_USER_ERROR);
set_exception_handler('myWarning',E_USER_WARNING);
set_exception_handler('myNtice',E_USER_NOTICE);
|
trigger_error('故意抛出个错误,还是很严重的哪一种!',E_USER_ERROR);
下面还附上php一些错误代码详解
参数 |
描述 |
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,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 |
E_ALL |
所有错误和警告,除级别 E_STRICT 以外。
(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)
|
http://www.bkjia.com/PHPjc/629638.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/629638.htmlTechArticle在php开发中我们一般会使用php自带的错误处理方法来处理一些错误,但是有些我们需要自定义一些错误处理机制来解决系统自带不能解决的...