第6天 PHP文件加载与错误处理
9. 文件加载
9.1. 文件加载的含义
含义:
将一个(别的)文件包含到当前文件中,成为当前文件运行过程中的一部分。
通常,一些公共的代码,在多个页面都需要用到的时候,会做成一个独立的文件。
然后在不同的页面需要用到的时候,直接载入进来就可以了。
语法:
include “要载入的文件路径”; //可以是相对路径,或本地物理路径。
说明:
可以载入php文件,也可以载入html文件。
示例:

原理:
载入一个文件的本质是:将被载入的文件“插入”到当前载入代码所在的位置。
9.2. 文件加载的四****种方式(重点)
四种方式如下所示:
include ‘要加载的文件’;
include_once ‘要加载的文件’;
require ‘要加载的文件’;
require_once ‘要加载的文件’;
其中,“要加载的文件”,是一个文件路径,可以是相对路径,也可以是物理路径,或直接文件名:
相对路径:
‘./文件名’;
‘./dir1/文件名’;
‘./dir1/dir2/文件名’;
‘../文件名’;
‘../dir1/文件名’;
‘../../dir1/dir2/文件名’;
等等。。。
物理路径:
‘c:/itcast/class/php66/day4/文件名’; //window系统
‘/path1/path2/文件名’; //linux、unix等系统
等等。。。
获取物理路径(绝对路径)的方式:
DIR:表示当前文件所在路径,由它可以构建出绝对路径;
getcwd():表示当前正访问的网页路径,由它也可以构建出绝对路径;
非相对非绝对路径(其实就是没有给出路径,只给出文件名):不推荐!
形式为: include ‘文件名’;
此时,会按如下顺序去寻找该文件:
1,先在php.ini中include_path项设定的目录中寻找该文件;
2,如果上一步没有找到,就在当前工作目录(由getcwd()获取)下寻找该文件;
3,如果上一步没有找到,就在当前载入语句的文件所在目录(由DIR获取)下寻找;
4,如果上一步还是没有找到,就报错了。
9.3. 四种方式的区别
include:每次都载入文件(可能会重复载入),如果载入失败,在报错后继续执行后续语句;

include_once:只载入一次(不会重复载入),如果载入失败,在报错后继续执行后续语句;

require:每次都载入文件(可能会重复载入),如果载入失败,在报错后终止程序;
require_once:只载入一次(不会重复载入),如果载入失败,在报错后终止程序;



一般来说,如果被载入的文件内容,是后续代码运行的必备前提,则应该使用require载入。
如果被载入的文件内容,只需要(或只允许)出现一次,则应该使用”xxxx_once”载入。
include() include_once() require() require_once() 这种也是允许
推荐使用:require_once “要引入的文件”
10. 错误处理
10.1. 错误分类
语法错误:
程序不能运行,是在运行之前,检查语法的时候,就发现语法出错,结果是提示错误,不运行程序。

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

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

10.2. 常见****错误代号****(重点)
含义:
是指在程序运行时,发生的错误,系统会针对每种错误,给出相应的错误代号,并进行提示(报错)。
另外,程序如果在运行之前检查语法的时候就发现语法错误,也会报错,也有一个错误代号。
常见错误代号有:
E_NOTICE:
提示性错误,轻微;
错误发生后,后面的程序继续执行。
E_WARNING:
警告性错误,稍微严重;
错误发生后,后面的程序继续执行。
E_ERROR:
严重错误/致命错误;
错误发生后,后面的程序不再执行!
E_PARSE:
语法错误(语法解析错误);
语法解释错误,是直接就不运行程序。
E_USER_NOTICE:
用户自定义的提示错误
E_USER_WARNING:
用户自定义的警告错误
E_USER_ERROR:
用户自定义的严重错误
E_ALL:
它是一个代表“所有”错误的代号。
说明:
1,这些错误代号,其实只是系统预先设定的一些常量,他们的值大约是:1, 2, 4, 8, 16.....
2,这些错误代号,通常只是用于对错误控制时进行“设置”使用。
3,他们是一系列的整数,并具有一定的规律:1,2,4,8,16,32,64, 。。。。
4,可以在php.ini中使用(设置)他们,如下所示:

我们自己开启的错误级别(E_ALL):代表所有的错误信息都显示。

10.3. 错误显示设置
如果有错误发生(触发了错误),默认情况下会被显示在页面(即输出的结果页面)。
我们可以对此进行设置,以决定以下两点:
1,设置display_errors以决定是否显示错误:
在php.ini中设置: display_errors = On或Off
这里设置,影响所有使用该php语言引擎的代码(网站页面);
在php文件中设置: ini_set(‘display_errors’, 1或0); //1表示显示,0不显示
在这里设置,只影响当前网页代码本身。
规定一下:所有脚本都需要更改配置文件信息,就在php.ini中进行修改,如果只希望在某个脚本文件中做修改,可以使用上面的ini_set()来进行设置
2,设置error_reporting以决定显示哪些错误:
在php.ini中设置: error_reporting = 错误代号1 | 错误代号2 | .....
//(要显示的就写出来,或者可以写E_ALL, 表示显示所有)
在代php文件中,道理类似:ini_set(‘error_reporting’, 错误代号1 | 错误代号2 | .....)

10.4. 错误****日志设置
如果有错误发生(触发了错误),默认情况下不会将错误信息记录(保存)下来。
我们可以对此进行设置,以决定以下两点:
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’);
PHP自定义错误及错误记录:
1)方式一:

会在当前脚本中相应的位置创建错误文件,并写入到文件里面去

2)方式二:


Apache:

access.log :记录了客户端访问的所有信息(客户端IP、请求时间、请求方式、请求的URI地址、http协议、请求状态)
作用:大数据分析、用户统计
error.log:记录了访问的相关错误信息,便于程序员进行BUG修复
总结: 一般看访问日志,找apache的访问日志:access.log
错误日志:找php的错误日志文件
10.5. 自定义错误处理****(重点/难点)
之前,我们面对的情形都是错误发生的时候,系统生成错误,并处理错误(给出错误信息)。
我们能控制的就只是:是否显示,显示什么,是否记录,记录到哪里?
实际上,我们也可以更进一步控制错误信息,以决定错误发生的时候,显示什么样的错误信息。
这就是“自定义错误处理”。
具体做法,分2步:
第1步:
声明错误发生时,由我们自己来处理——设定一个错误处理的函数名。
第2步:
定义该函数,在函数中详细设定错误的处理情况:怎么显示,显示什么,怎么记录,记录什么。


说明:此函数是系统函数,会自动调用
