PHP基础8-错误处理

1.错误分类

Ⅰ.语法错误:
程序不能运行,是在运行之前,检查语法的时候,就发现语法出错,结果是提示错误,不运行程序。

Ⅱ.运行时错误:
语法检查没错,然后开始运行,在运行中出现了错误,然后报错。
这是开发中最常见的错误。

Ⅲ.逻辑错误:
程序能运行,且一直到结束没有报错,但执行得到的结果却是错的。

2.常见错误代号

Ⅰ.含义:
是指在程序运行时,发生的错误,系统会针对每种错误,给出相应的错误代号,并进行提示(报错)。
另外,程序如果在运行之前检查语法的时候就发现语法错误,也会报错,也有一个错误代号。

Ⅱ.常见错误代号有:
➀E_NOTICE:
提示性错误,轻微;
错误发生后,后面的程序继续执行。
➁E_WARNING:
警告性错误,稍微严重;
错误发生后,后面的程序继续执行。
➂E_ERROR:
严重错误/致命错误;
错误发生后,后面的程序不再执行!
➃E_PARSE:
语法错误(语法解析错误);
语法解释错误,是直接就不运行程序。
➄E_USER_NOTICE:
用户自定义的提示错误
➅E_USER_WARNING:
用户自定义的警告错误
➆E_USER_ERROR:
用户自定义的严重错误
➇E_ALL:
它是一个代表“所有”错误的代号。

Ⅲ.说明:
➀这些错误代号,其实只是系统预先设定的一些常量,他们的值大约是:1, 2, 4, 8, 16.....
➁这些错误代号,通常只是用于对错误控制时进行“设置”使用。
➂他们是一系列的整数,并具有一定的规律:1,2,4,8,16,32,64, 。。。。
➃可以在php.ini中使用(设置)他们

3.错误触发

就是发生了一个错误的意思——即触发了错误。
有两种情形会触发错误:
➀程序本身有错,则运行时就会触发错误(并提示)。
➁程序本身没错,但出现不符合预计的情形(比如数据不符合要求)。
此时程序员可以主动触发一个错误,也可以说是由程序员“主动创建一个错误”
——这就是“用户错误”,包括:
E_USER_NOTICE:
E_USER_WARNING:
E_USER_ERROR:

如何触发“用户错误”呢?
自定义错误触发语法:
trigger_error(“自定义错误提示内容”, 自定义错误的代号);


     60 || $a < 0){
                //trigger_error("我们自己触发的错误的提示信息",用户错误);
                trigger_error("年龄不在我们公司的投保范围中",E_USER_NOTICE);
            }else{
                echo "
用户资料审核通过!"; } } $age = 18; reg_user($age); echo "
再来一个需要审核的用户:"; reg_user(66); ?>

网页输出:


PHP基础8-错误处理_第1张图片
Snipaste_2019-05-17_16-02-22.png

4.错误显示设置

如果有错误发生(触发了错误),默认情况下会被显示在页面(即输出的结果页面)。

我们可以对此进行设置,以决定以下两点:
Ⅰ.设置display_errors以决定是否显示错误:
在php.ini中设置: display_errors = On或Off
这里设置,影响所有使用该php语言引擎的代码(网站页面);
在php文件中设置: ini_set(‘display_errors’, 1或0); //1表示显示,0不显示
在这里设置,只影响当前网页代码本身。
Ⅱ.设置error_reporting以决定显示哪些错误:
在php.ini中设置: error_reporting = 错误代号1 | 错误代号2 | .....
//(要显示的就写出来,或者可以写E_ALL, 表示显示所有)
在代php文件中,道理类似:ini_set(‘error_reporting’, 错误代号1 | 错误代号2 | .....)

5.错误日志设置

如果有错误发生(触发了错误),默认情况下不会将错误信息记录(保存)下来。

我们可以对此进行设置,以决定以下两点:
1,设置log_errors以决定是否记录错误:
php.ini中设置: log_errors = On 或 Off
代码文件中设置: ini_set (‘log_errors’, 1或0)
2,设置error_log以决定记录到哪里:
通常,就设置为一个文件名,php系统会在网站的每个文件夹下都建立该文件,并记录错误。
php.ini中: error_log = error.txt; //它是纯文本的
代码中: ini_set(“error_log”, ‘error.txt’);


    111";

    include './no-this-file.php';
    echo "

222

"; $n2 = raund(2.6); echo"

333

"; ?>

6.自定义错误处理

具体做法,分2步:
Ⅰ.声明错误发生时,由我们自己来处理——设定一个错误处理的函数名。
Ⅱ.定义该函数,在函数中详细设定错误的处理情况:怎么显示,显示什么,怎么记录,记录什么。
注意:自定义错误只能处理“非致命错误”(不是E_ERROR的错误)

示例代码:


糟了,出错了,东窗事发啦!

"; echo "
错误代号:" . $errCode; echo "
错误信息:" . $errMsg; echo "
错误文件:" . $errFile; echo "
错误行号:" . $errLine; echo "

"; }; //还可以更进一步将所有的错误信息写入错误日志 // function my_error_handler($errCode,$errMsg,$errFile,$errLine){ // //此函数中,我们就可以去自己显示有关错误信息和记录信息 // $str = "

糟了,出错了,东窗事发啦!

"; // $str .= "发生时间:" . date('Y-m-d H:i:s'); // $str .= "
错误代号:" . $errCode; // $str .= "
错误信息:" . $errMsg; // $str .= "
错误文件:" . $errFile; // $str .= "
错误行号:" . $errLine; // $str .= "

"; // echo $str; // //错误日志 // //FILE_APPEND表示该函数使用“追加模式”来写入数据 // //写入html文件比txt刚容易查阅 // file_put_contents("./error.html",$str,FILE_APPEND); // }; //参数解释 //$errCode:错误代号 //$errMsg:错误信息 //$errFile:错误文件 //$errLine:行号 //此形参顺序固定,而且是由系统会调用该函数并传入实参数据 //给出几个出错的代码: echo "
v1=$v1"; //未定义的变量 include './no-this-file.php'; //载入失败 function I1(){}; l1(); //调用不存在的函数 ?> ?>

在网页中输出如下:


PHP基础8-错误处理_第2张图片
Snipaste_2019-05-20_16-20-39.png

你可能感兴趣的:(PHP基础8-错误处理)