文件加载
有4个文件加载的语法形式(注意,不是函数):
include, include_once, require, require_once
本质一致,都是用于加载/引入/包含/载入一个外部文件到当前php代码中来
都是语法结构,而非函数,使用形式有两种:
- include ‘文件路径’
- include (‘文件路径’)
区别:
- 加载文件失败,include
和require
处理规则不同
include
发出警告并继续执行后续代码
require
直接终止
- 加载文件重复,XXX
和XXX_once
处理规则不同
XXX_once
保证不会被重复加载
文件路径
相对路径
相对于某个文件的路径
以“./”, 或“../”
,开头
相对位置对一个网站中的所有内容(包括php,html,图片,css,js文件)都有效
绝对路径
- 本地绝对路径
window系统: c:/d1/d2/page3.php
unix系列系统: /d1/d2/page3.php - 网络绝对路径
http://www.abc.com/d1/d2/page4.php
只有文件名(无路径)
如果只给出文件名,而没有给出路径,则此时有其内部找到该文件的规则,如下:
1. 首先在系统设置的include目录中查找
- php.ini
:include_path
设定
;Windows:"\path1;\path2"
include_path=".;c:\php\include;"
- 或者在脚本中设定
# 无需重启apache,只对当前脚本有效
set_include_path("include_path");
- 更安全的做法
在系统路径的末尾增加自定义路径
PATH_SEPARATOR
代表目标分隔符,unix
->":"
,win
->";"
$path = get_include_path(); # 获取系统的include_path
$path_new = $path.PATH_SEPARATOR.$user_inlcude_path; # $user_inlcude_path指玩家自定义的include_path
set_include_path($path_new);
没找到 -> 在当前执行的网页文件所在目录(所谓当前工作目录)查找:
所谓当前网页文件,就是地址栏中显示的那个文件名。没找到 -> 则在当前include命令所在文件的所在目录中查找:
如果一个文件(A)包含文件B,在文件B中又有include命令包含文件C,
此时B中的路径问题就可能发生这种情况。
文件载入执行过程
- 从
include
语句处退出php脚本模式(进入html代码模式) - 载入
include
语句所设定的文件中的代码,并执行之(如同在当前文件中一样) - 退出html模式重新进入php脚本模式,继续之后的代码
错误处理
分类
- 语法错误
- 运行时错误
只有程序运行到某行,或在某些特定的情形下运行才会发生的错误 - 逻辑错误
未报错,但结果错误
分级
在php中,将各种错误,分门别类,依据不同的严重程度和产生的来源(机制),将各种错误分为大约10几个级别。
每个级别的错误,都对应一个内部的名称——系统常量!
这些常量(代号)是供我们对对该类错误进行“控制”的标示符而已
系统错误
E_ERROR
:系统严重错误
程序立即停止执行E_WARNING
:系统警告
提示错误,并继续执行E_PARSE
:语法错误
提示错误,而且代码完全不会运行——在运行之前先检查语法。E_NOTICE
:系统提示
提示错误,并继续执行
用户自定义错误
只有3个:
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
其他
E_ALL
: 代表所有错误E_STRICT
:代表“严格性”语法检查错误
某种语法是可以执行的
错误触发
3种常见的运行时错误:
- 使用不存在的变量
- 包含不存在的文件
- 调用不存在的函数
人工触发
通过程序代码而“产生”一个错误。
trigger_error(“错误提示” , 用户错误代号);
错误的显示控制
控制途径
网页中显示(提示)错误信息,有2种控制途径:
1. 在php.ini
文件中设定,对所有PHP程序都有效;
2. 在当前脚本文件中,只对当前脚步文件有效。
控制方面
- 设定是否显示:
display_error
php.ini
中
display_error = On;
//表示显示, Off表示不显示- 脚本中
ini_set(“display_error”, 1);
//1表示显示,0表示不显示,也可以用true,false
脚本中的设定优先级高
- 设定显示哪些级别的错误
E_ALL并非真的表示“所有”,而是只有E_ALL | E_STRICT才真的表示所有
php.ini
中
error_reporting = E_NOTICE; # 只显示E_NOTICE错误
error_reporting = E_NOTICE | E_WARNING; # 显示E_NOTICE和E_WARNING错误
error_reporting = E_ALL | E_STRICT; # 开发阶段最常用
- 脚本中
ini_set(“error_reporting”, E_NOTICE); //只显示E_NOTICE错误
ini_set(“error_reporting”, E_ALL | E_STRICT & ~E_NOTICE); //只关闭E_NOTICE错误
ini_set()
可以设定几乎所有php.ini中的设定项
形式:
ini_set(“设定项名称” ,值) 只对当前脚本有效,无需重启apache,很方便。
ini_get(“设定项名称”);#用于获取某项的值。
记录错误日志
开发阶段,通常显示所有错误——意图解决错误
产品阶段,通常隐藏所有错误——并同时将错误信息记录到错误日志文件。
- php.ini
中
log_errors = On; # 用于设定是否记录错误日志,On记录,Off不记录
error_log = “错误日志文件名”; # 设定错误日志的文件名
该文件没有给定路径的话,则系统会在每个文件夹下建立该文件并记录进去
error_log
还有一个特殊值可以使用:
error_log = syslog;
//此时不会记录错误日志文件,而是把错误信息写入到系统错误日志中
- 脚本中
ini_set(“log_errors” , On); //或者Off
ini_set(“error_log”, ‘err1.log’); //后缀随便用
int_set(“error_log”, syslog); //记录到操作系统日志中。
自定义错误处理
步骤:
- 设定要用来进行自定义处理错误的函数名
set_error_handle("errFunName");
- 参数顺序不可修改,名称可自定义,错误发生,自动传参调用
function errFunName($errNo, $errMsg, $errFile, $errLine){}
注意:
- 无需手动,错误出现自动调用自定义的错误处理函数
- 严重错误
(E_ERROR, E_USER_ERROR)
自定义错误处理函数无法处理 - 一旦使用了自定义错误处理函数,系统不再处理