【PHP】文件加载和错误处理

文件加载

有4个文件加载的语法形式(注意,不是函数):
include, include_once, require, require_once
本质一致,都是用于加载/引入/包含/载入一个外部文件到当前php代码中来
都是语法结构,而非函数,使用形式有两种:
- include ‘文件路径’
- include (‘文件路径’)

区别:
- 加载文件失败,includerequire处理规则不同
include发出警告并继续执行后续代码
require直接终止
- 加载文件重复,XXXXXX_once处理规则不同
XXX_once保证不会被重复加载

文件路径

相对路径

相对于某个文件的路径
“./”, 或“../”,开头
相对位置对一个网站中的所有内容(包括php,html,图片,css,js文件)都有效

绝对路径

只有文件名(无路径)

如果只给出文件名,而没有给出路径,则此时有其内部找到该文件的规则,如下:
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);
  1. 没找到 -> 在当前执行的网页文件所在目录(所谓当前工作目录)查找:
    所谓当前网页文件,就是地址栏中显示的那个文件名。

  2. 没找到 -> 则在当前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. 在当前脚本文件中,只对当前脚步文件有效。

控制方面

  1. 设定是否显示:display_error
    • php.ini
      display_error = On; //表示显示, Off表示不显示
    • 脚本中
      ini_set(“display_error”, 1); //1表示显示,0表示不显示,也可以用true,false
      脚本中的设定优先级高
  2. 设定显示哪些级别的错误
    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);       //记录到操作系统日志中。

自定义错误处理

步骤:

  1. 设定要用来进行自定义处理错误的函数名
    set_error_handle("errFunName");
  2. 参数顺序不可修改,名称可自定义,错误发生,自动传参调用
    function errFunName($errNo, $errMsg, $errFile, $errLine){}

注意:

  • 无需手动,错误出现自动调用自定义的错误处理函数
  • 严重错误(E_ERROR, E_USER_ERROR)自定义错误处理函数无法处理
  • 一旦使用了自定义错误处理函数,系统不再处理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值