PHP 简介06-错误处理

1.错误处理

1.分类

​ PHP的错误编码:

​ 1.error错误 错误号:1

​ 致命错误,一旦碰到error错误,程序立马终止

​ 2.warning错误 错误号:2

​ 警告错误,一旦碰到warning错误,程序会给出错误警告,但不会终止程序的执行

​ 3.notice错误 错误号:8

​ 提示错误,可能是错误,也可能不是错误,不会终止程序的执行

2.错误的屏蔽

在上线项目中,不允许出现任何错误

1.方法一:

通过错误抑制符@来屏蔽当前某一变量的错误

2.方法二:(推荐)

通过error_reporting函数来屏蔽函数之后的错误

该函数一般写在程序的最前面

影响范围:该文件

  • error_reporting(E_ALL) 显示所有的错误

  • error_reporting(E_WARNING) 只显示warning级错误

  • error_reporting(E_NOTICE) 只显示notice级错误

  • error_reporting(E_ERROR) 只显示error级错误,一般屏蔽不掉

  • error_reporting(E_ALL ^E_NOTICE)

    除了notice级错误,其余都报

  • error_reporting(E_ALL & ~E_NOTICE)

  • error_reporting(E_ALL ^E_EARNING)

    除了warning级错误,其余都报

  • error_reporting(E_ALL & ~E_WARNING)

3.方法三:

通过修改配置文件,来屏蔽错误

影响范围:整个服务器

配置文件位置:wamp\bin\apache\apache2.4.18\bin\php.ini

注意:修改任意配置后,都需要重启服务器

1
2
3
4
5
//  修改内容2:
// error_reporting = 值
该值与 屏蔽2的函数值一模一样


4.方法四:

通过函数临时修改配置文件ini_get() ini_set()

影响范围:当前文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var_dump( ini_get('display_errors') );
ini_set('display_errors', 0);
ini_set('display_errors', 'Off');
ini_set('display_errors', 'On');
var_dump( ini_get('display_errors') );

# 32767 E_ALL
# 1 E_ERROR
# 2 E_WARNING
# 8 E_NOTICE

var_dump( ini_get('error_reporting') );
ini_set('error_reporting', 1);
ini_set('error_reporting', E_ERROR);
ini_set('error_reporting', E_WARNING);
ini_set('error_reporting', E_NOTICE);
var_dump( ini_get('error_reporting') );

echo $a;
echo strrev();


3.PHP错误日志

日志函数:error_log(日志信息,日志类型,目标文件)

日志类型:如果是写入日志,选择3

目标文件:当日志类型为3,才需要第三个参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$a = 10;
$b = 0;

if ($b == 0) {
// 日志信息
$ip = $_SERVER['REMOTE_ADDR']; # 客户IP
$time = date('Y/m/d H:i:s'); # 访问时间
$method = $_SERVER['REQUEST_METHOD']; # 访问方式
$info = '除数不能为0'; # 错误信息
$address = __FILE__; # 错误文件地址
$line = __LINE__; # 当前行号

# 记事本的换行: \r\n 先回车再换行
$log = "{$ip} - - [{$time}] {$method} {$info} in {$address} on line {$line} \r\n";

error_log($log, 3, './log.txt');


// 自定义报错
// trigger_error(报错信息, 错误类型)
// E_USER_ERROR 用户自定义的致命错误
// E_USER_WARNING 用户自定义的警告错误
// E_USER_NOTICE 用户自定义的提示错误
trigger_error($info, E_USER_NOTICE);

}else{
echo $a/$b;
}


3.逻辑错误的处理

逻辑错误:既不报错,也不终止程序,主要因为设计错误

两种缩小排错范围的方法:

1.断点法:通过die/exit中断程序的执行,在die之前输出相关变量,查看是否与预想数值符合

2.注释法:通过注释局部代码,查看结果是否有变化