PHP-错误处理
PHP 5 预定义错误和日志常量
| 值 | 常量 | 描述 |
| 1 | E_ERROR | 运行时致命的错误,会终止执行脚本。 |
| 2 | E_WARNING | 运行时的警告,非致命的错误,不终止执行脚本。 |
| 4 | E_PARSE | 编译时语法解析错误,解析错误仅仅由分析器产生。 |
| 8 | E_NOTICE | 运行时的注意通知,表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。 |
| 16 | E_CORE_ERROR | 在 PHP 初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由 PHP 引擎核心产生的,不包括PHP核心造成的错误。 |
| 32 | E_CORE_WARNING | PHP 初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由 PHP 引擎核心产生的,不包括PHP核心错误警告。 |
| 64 | E_COMPILE_ERROR | 致命编译时错误。类似 E_ERROR, 但是是由 Zend 脚本引擎产生的。 |
| 128 | E_COMPILE_WARNING | 编译时警告 (非致命错误)。类似 E_WARNING,但是是由 Zend 脚本引擎产生的。 |
| 256 | E_USER_ERROR | 用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 |
| 512 | E_USER_WARNING | 用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。 |
| 1024 | E_USER_NOTICE | 用户产生的注意信息。类似 E_NOTICE, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。 |
| 2048 | E_STRICT | 关于PHP版本移植的兼容性和互操作性的建议。 |
| 4096 | E_RECOVERABLE_ERROR | 可被捕捉的致命错误。它表示发生了一个可能非常危险的错误,但是还没有导致 PHP 引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。 |
| 8192 | E_DEPRECATED | 运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。 |
| 16384 | E_USER_DEPRECATED | 用户产生的警告信息。类似 E_DEPRECATED, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。 |
| 32767 | E_ALL | E_STRICT 除外的所有错误和警告信息。 |
打开一个不存在的文件
<?php
/** * Coded by MuT6 Sch01aR
* Date: 2018/3/12 22:30
*/
$fp = fopen('test.txt','r');
echo 'ok';
?>
运行结果
报了一个文件不存在的警告,后面的ok成功打印
使用die()方法处理错误
执行完die()方法后程序会退出
<?php
/**
* Coded by MuT6 Sch01aR
* Date: 2018/3/12 22:30
*/
//使用die()方法处理
if (!file_exists('test.txt')){ //判断文件是否存在
die('不存在文件!');
}
//die()方法的另一个更简便的写法
file_exists('test.txt') or die('不存在文件!!!')
?>
运行结果

自定义错误处理函数
自己定义错误处理的函数来处理程序的错误
<?php
/**
* Author: MuT6 Sch01aR
* Date: 2018/3/13
* Time: 12:12
*/
//定义一个错误处理函数
function my_error($errno, $errmsg){ // $errno为错误号,$errmsg为错误信息
echo '错误号:'.$errno."\n";
echo '错误信息:'.$errmsg;
}
//改写set_error_handler处理器,调用错误处理函数my_error处理级别为E_WARNING的错误
set_error_handler('my_error', E_WARNING);
$fp = fopen('test.txt','r'); //打开一个不存在的文件
?>
运行结果

错误触发器
错误触发器可以处理一些特定的错误
<?php
/**
* Author: MuT6 Sch01aR
* Date: 2018/3/13
* Time: 12:41
*/
$age = 121;
if ($age > 120){
//调用系统的触发器
trigger_error('年龄过大',E_USER_WARNING);
exit();
}
?>
运行结果

系统触发器处理了特定的错误
也可以自己定义错误触发器
<?php
/**
* Author: MuT6 Sch01aR
* Date: 2018/3/13
* Time: 12:41
*/
//定义一个错误触发器
function my_error($errno, $errmsg){
echo '错误号:'.$errno."\n";
echo '错误信息:'.$errmsg;
}
set_error_handler('my_error', E_USER_WARNING);
$age = 121;
if ($age > 120){
//调用系统的触发器
trigger_error('年龄过大',E_USER_WARNING);
exit();
}
?>
运行结果

错误日志
错误日志用来记录程序运行时的错误
<?php
/**
* Author: MuT6 Sch01aR
* Date: 2018/3/13
* Time: 12:02
*/
function my_error($errno, $errmsg){
echo '错误号:'.$errno.'----'.'错误信息:'.$errmsg;
$error_msg = '错误号:'.$errno.'----'.'错误信息:'.$errmsg;
date_default_timezone_set("Asia/Chongqing");
$error_time = date('Y-m-d G:i:s');
error_log('['.$error_time.']'.$error_msg."\n",3,"log.txt");
}
set_error_handler('my_error');
function Guess_Age($age){
if($age> 120){
trigger_error('年龄过大'); //触发错误
}
}
Guess_Age(123);
?>
运行结果

生成了一个记录错误的日志文件


浙公网安备 33010602011771号