第五天 文件路径加载 错误处理
2017-08-02 15:48
92 查看
文件加载综述:
有4个文件加载的语法形式:
include,include_once,require,require_once
他们的本质是一样的,都是用于加载/引入/包含/载入一个外部文件到当前php代码中来
他们只在2个方面有细微的区别:
1.如果文件加载失败,有不同的处理规则。include和require的区别
2.如果文件加载重复,择优不同的处理规则。xxx和xxx_once不同
3.他们都是语法结构,而非函数,使用形式可以有两种:
3.1include “文件路径”
3.2include
(”文件路径“)文件路径问题:
不管是哪个载入语法,都涉及到文件路径问题。主要有3种情况:
1.相对路径:./../
就是以./../
开头的路径。
./表示当前网页文件所在的位置
../表示当前所在网页文件所在位置的上一级位置(文件夹,目录)
这种相对位置对一个网站中的所有内容(包括php,html,)等都有作用。
<?php
有两种绝对路径
1.本地绝对路径:
window系统:c://d1/d2/page3.php
unix系统:/d1/d2/page3.php
2.绝对网络路径: http://www.abc.com/d1/d2/page4.php 3.只有文件名(无路径)
在php的include语法中,如果只给出文件名,而没有给出路径,则此时尤其内部找文件
的规则。
1.首先在系统设置的include目录下查找。
在php.ini中,有include_path设定:
;UNIX: "/path1:/path2"
;include_path= ".;/php/includes"
;
;Windows: "\path1;\path2"
;include_path= ".;c:\php\includes"
其设定可以设定多个目录,使用;进行分隔开,系统按照顺序依次查找文件。
我们也可以在脚本中进行设置:
//设置配置文件夹中的include_path值-代码中的设定只对当前
//代码有效
更加常见的一种做法:
所谓当前网页文件,就是地址栏中显示的那个文件名
3.上面还没找到,则在当前include命令所在文件的所在目录中进行查找。
例如:includepage1.php
例如:当前工作目录是/opt/www/html
一个page1.php在当前目录下/opt/www/html/page1.php
另一个在当前目录下的一个文件夹下。/opt/www/html/sss/page1.html则
优先第一个。
文件载入过程
从include语句处退出php脚本模式(进入html代码模式)
载入include语句所设定的文件中的代码并且执行(如同在文件夹中一样)
退出html模式重新进入php脚本模式,继续之后的代码
举例:include_yuanli.php
page3.php
<
156be
p style="margin-bottom:0cm;line-height:100%;">
page4中第一行page4中第二行第二行//仍然存在,证明include中的return不会影响include_return.php错误处理错误代码的分类:语法错误:程序无法运行,直接提示语法错误逻辑错误:程序从头到尾都没有发生提示错误,但程序运行计算的结果是错误的错误的分级在平衡盘中,将各种错误根据不同的严重程度和产生的来源分为几个级别:每一个界别的错误,对对应着相应的系统常量。系统错误:E_ERROR:系统严重错误一发生,系统立即停止执行。E_WARNING:系统警告一发生,提示错误并且继续执行。通常该错误希望能够在”下一个工作日“去处理和解决。E_NOTICE:系统提示一发生,提示错误,而且代码完全并继续执行。E_PARSE:语法错误:一发生,停止执行。他们的本质是什么呢?echo"<br/>ERROR=".E_ERROR;
输出结果:ERROR=1E_WARNING=2E_PARSE=4E_NOTICE=8可见他们只是一些系统变量。用户自定义错误:只有3个:E_USER_ERRORE_USER_WARNINGE_USER_NOTICE我们可以在程序中,自己创建生成错误。其他:E_ALL代表所有的错误E_STRICT代表严格性错误的触发:程序确实发生了运行时错误,也可能是语法检查错误。
3种常见的运行时错误:
//三种常见的运行时错误
Undefinedvariable: var1 in /var/www/html/day5/error_1.php on line
15include(no-file.php):failed to open stream:
没有那个文件或目录Fatalerror: Uncaught Error: Call to undefined function func1() in人工触发:
程序员通过程序代码而产生一个错误。
语法:
trigger_error(“错误提示”)
//三种常见的运行时错误错误的显示控制:网页中显示(提示)错误信息,是可以进行控制的,有两种途径:1.在php。ini文件中设定,对所有的php文件都有效2.在当前脚本文件中,只对当前脚本文件有效。错误的显示有两个方面可以进行控制:1.设定是否显示:display_error:php.ini中,display_error=on;//表示显示,off表示不显示display_errors=On脚本中:ini_set(‘display_eroor’,1’)// 1表示显示,0表示不显示2.设定显示哪些级别的错误--当第一项设置为显示的情况下php.ini文件中:error_reporting= E_NOTICE //只显示E_NOTICE错误error_reporting= E_NOTICE | E_WARNING ;/ /显示E_NOTICE和
//E_NOTEING的错误error-reporting= E_NOTICE | E_WARNING | E_USER_ERROR解释上一行:E_NOTICE:00000000 00001000E_WARNING:00000000 00000010E_USER_ERROR:00000001 0000000或运算:0000000100001010实际上,在开发阶段,通常使用的是:error_reporting = E_ALL | E_STRICT系统默认设置是:error_reporting=E_ALL& ~E_DEPRECATED
& ~E_STRICT他是这样的结果:E_ALL 01110111 11111111E_STRICT 00001000 0000000或运算:
可见,E_ALL并非表示所有,只有E_ALL和E_STRICT一起
表示所有。如果想在显示所有错误中关闭某个特定的错误:
error-reporting= E_ALL | E_STRICT & ~E_NOTICE (关闭了
E_NOTICE的错误)
3.在代码中设定
ini_set(‘error_reporting’,E_NOTICE);
ini_set(‘error_reportign’,E_NOTICE | E_WARNING);ini.set()函数几乎可以设定所有php.ini中的设定项目:
形式如下:
ini_set(‘设定名称名’,值);//这种设定只有对当前脚本有效,无需重启apache,很方便。记录错误日志:
在开发阶段,通常都是显示所有的错误。意图解决错误。
在产品阶段,我们通常都是隐藏所有的错误—并且同时将错误信息记录到文件中--错误日志
我们可以自己查看错误日志已解决开发阶段没有发现的错误问题。
记录错误日志同样有两种途径:
1.在php.ini文件中设定。
log_errors=On;//用于设定是否记录错误日志,on记录,off不记录。
error_log="/opt/lampp/logs/php_error_log";//错误日志文件名
如果没有给定路径,则系统会在每一个文件夹下面建立文件并记录错误。2.在当前脚本中设置。
ini_set(‘log_errors’,On);
ini_Set(‘error_log’,‘err1.log’)
ini_set(‘error_log’,‘err2.txt’)
ini_set(‘error_log’,‘err3.html’)自定义错误处理:
自定义错误处理可以让我们自己完全控制错误的输出内容
1.设定要用来处理错误的函数名:set_error_handler(‘函数名’)
2.自己去定义该函数,并在其中进行任何错误信息的输出。
设置好后,发生错误,系统就会调用该函数里面设置的代码。
set_error_handler('myError');//该函数不需要特别去调用,只有一发生错误,就会
自动调用。
有4个文件加载的语法形式:
include,include_once,require,require_once
他们的本质是一样的,都是用于加载/引入/包含/载入一个外部文件到当前php代码中来
他们只在2个方面有细微的区别:
1.如果文件加载失败,有不同的处理规则。include和require的区别
2.如果文件加载重复,择优不同的处理规则。xxx和xxx_once不同
3.他们都是语法结构,而非函数,使用形式可以有两种:
3.1include “文件路径”
3.2include
(”文件路径“)文件路径问题:
不管是哪个载入语法,都涉及到文件路径问题。主要有3种情况:
1.相对路径:./../
就是以./../
开头的路径。
./表示当前网页文件所在的位置
../表示当前所在网页文件所在位置的上一级位置(文件夹,目录)
这种相对位置对一个网站中的所有内容(包括php,html,)等都有作用。
<?php
include '../day4/sleep.php'; ?>2.绝对路径:c:/abc/def
有两种绝对路径
1.本地绝对路径:
window系统:c://d1/d2/page3.php
unix系统:/d1/d2/page3.php
2.绝对网络路径: http://www.abc.com/d1/d2/page4.php 3.只有文件名(无路径)
在php的include语法中,如果只给出文件名,而没有给出路径,则此时尤其内部找文件
的规则。
1.首先在系统设置的include目录下查找。
在php.ini中,有include_path设定:
;UNIX: "/path1:/path2"
;include_path= ".;/php/includes"
;
;Windows: "\path1;\path2"
;include_path= ".;c:\php\includes"
其设定可以设定多个目录,使用;进行分隔开,系统按照顺序依次查找文件。
我们也可以在脚本中进行设置:
//设置配置文件夹中的include_path值-代码中的设定只对当前
//代码有效
set_include_path('/var/www/html/day4'); include 'sleep.php';//使用一个无路径的载入,该sleep.php //实际是day4中的一个文件
更加常见的一种做法:
$path_new = $path.PATH_SEPARATOR."/var/www/html/dvwa"; set_include_path($path_new); include "about.php";2.上面没找到,在当前执行的网页文件所在目录查找(所谓当前工作目录)。
所谓当前网页文件,就是地址栏中显示的那个文件名
3.上面还没找到,则在当前include命令所在文件的所在目录中进行查找。
例如:includepage1.php
例如:当前工作目录是/opt/www/html
一个page1.php在当前目录下/opt/www/html/page1.php
另一个在当前目录下的一个文件夹下。/opt/www/html/sss/page1.html则
优先第一个。
文件载入过程
从include语句处退出php脚本模式(进入html代码模式)
载入include语句所设定的文件中的代码并且执行(如同在文件夹中一样)
退出html模式重新进入php脚本模式,继续之后的代码
举例:include_yuanli.php
<?php include './page3.php'; ?>
page3.php
<
156be
p style="margin-bottom:0cm;line-height:100%;">
page3前面 <?php ?> page3后面 相当于: <?php echo “<p>先前的代码</p>”;?> page3前面 <?php ?> page3后面 <?php echo “<p>代码</p>” ?> 几个区别: include_once 和include的区别:前者能够保证不会被重复加载。 Requie 和 include 的区别: 引用失败时,include警告并且继续执行后续代码, require终止。 require_once 和require的区别:前者保证不会被重复载入。 Return 关键字 以前我们只在函数中出现return关键字,其作用是:结束函数,并可以返回数据 return // 单纯结束 retuen $x ; //结束,并且返回数据$x; 那么: 被包含的(载入)的文件中return关键字也具有同样的作用。 include_return.php <?php include "page4.php"; ?> page4.php <?php return; ?> 输出结果: 第一行
page4中第一行page4中第二行第二行//仍然存在,证明include中的return不会影响include_return.php错误处理错误代码的分类:语法错误:程序无法运行,直接提示语法错误逻辑错误:程序从头到尾都没有发生提示错误,但程序运行计算的结果是错误的错误的分级在平衡盘中,将各种错误根据不同的严重程度和产生的来源分为几个级别:每一个界别的错误,对对应着相应的系统常量。系统错误:E_ERROR:系统严重错误一发生,系统立即停止执行。E_WARNING:系统警告一发生,提示错误并且继续执行。通常该错误希望能够在”下一个工作日“去处理和解决。E_NOTICE:系统提示一发生,提示错误,而且代码完全并继续执行。E_PARSE:语法错误:一发生,停止执行。他们的本质是什么呢?echo"<br/>ERROR=".E_ERROR;
echo "<br/>E_WARNING=".E_WARNING; echo "<br/>E_PARSE=".E_PARSE; echo "<br/>E_NOTICE=".E_NOTICE;
输出结果:ERROR=1E_WARNING=2E_PARSE=4E_NOTICE=8可见他们只是一些系统变量。用户自定义错误:只有3个:E_USER_ERRORE_USER_WARNINGE_USER_NOTICE我们可以在程序中,自己创建生成错误。其他:E_ALL代表所有的错误E_STRICT代表严格性错误的触发:程序确实发生了运行时错误,也可能是语法检查错误。
3种常见的运行时错误:
//三种常见的运行时错误
错误代码:
Undefinedvariable: var1 in /var/www/html/day5/error_1.php on line
15include(no-file.php):failed to open stream:
没有那个文件或目录Fatalerror: Uncaught Error: Call to undefined function func1() in人工触发:
程序员通过程序代码而产生一个错误。
语法:
trigger_error(“错误提示”)
//三种常见的运行时错误错误的显示控制:网页中显示(提示)错误信息,是可以进行控制的,有两种途径:1.在php。ini文件中设定,对所有的php文件都有效2.在当前脚本文件中,只对当前脚本文件有效。错误的显示有两个方面可以进行控制:1.设定是否显示:display_error:php.ini中,display_error=on;//表示显示,off表示不显示display_errors=On脚本中:ini_set(‘display_eroor’,1’)// 1表示显示,0表示不显示2.设定显示哪些级别的错误--当第一项设置为显示的情况下php.ini文件中:error_reporting= E_NOTICE //只显示E_NOTICE错误error_reporting= E_NOTICE | E_WARNING ;/ /显示E_NOTICE和
//E_NOTEING的错误error-reporting= E_NOTICE | E_WARNING | E_USER_ERROR解释上一行:E_NOTICE:00000000 00001000E_WARNING:00000000 00000010E_USER_ERROR:00000001 0000000或运算:0000000100001010实际上,在开发阶段,通常使用的是:error_reporting = E_ALL | E_STRICT系统默认设置是:error_reporting=E_ALL& ~E_DEPRECATED
& ~E_STRICT他是这样的结果:E_ALL 01110111 11111111E_STRICT 00001000 0000000或运算:
可见,E_ALL并非表示所有,只有E_ALL和E_STRICT一起
表示所有。如果想在显示所有错误中关闭某个特定的错误:
error-reporting= E_ALL | E_STRICT & ~E_NOTICE (关闭了
E_NOTICE的错误)
3.在代码中设定
ini_set(‘error_reporting’,E_NOTICE);
ini_set(‘error_reportign’,E_NOTICE | E_WARNING);ini.set()函数几乎可以设定所有php.ini中的设定项目:
形式如下:
ini_set(‘设定名称名’,值);//这种设定只有对当前脚本有效,无需重启apache,很方便。记录错误日志:
在开发阶段,通常都是显示所有的错误。意图解决错误。
在产品阶段,我们通常都是隐藏所有的错误—并且同时将错误信息记录到文件中--错误日志
我们可以自己查看错误日志已解决开发阶段没有发现的错误问题。
记录错误日志同样有两种途径:
1.在php.ini文件中设定。
log_errors=On;//用于设定是否记录错误日志,on记录,off不记录。
error_log="/opt/lampp/logs/php_error_log";//错误日志文件名
如果没有给定路径,则系统会在每一个文件夹下面建立文件并记录错误。2.在当前脚本中设置。
ini_set(‘log_errors’,On);
ini_Set(‘error_log’,‘err1.log’)
ini_set(‘error_log’,‘err2.txt’)
ini_set(‘error_log’,‘err3.html’)自定义错误处理:
自定义错误处理可以让我们自己完全控制错误的输出内容
1.设定要用来处理错误的函数名:set_error_handler(‘函数名’)
2.自己去定义该函数,并在其中进行任何错误信息的输出。
设置好后,发生错误,系统就会调用该函数里面设置的代码。
set_error_handler('myError');//该函数不需要特别去调用,只有一发生错误,就会
自动调用。
function myError($errNo, $errMsg, $errFile, $errLine){}echo "$v1";但是如果发生的是关键的错误,将会调用默认的函数。
相关文章推荐
- 无法在此路径使用此配置节。当站点管理员使用继承的配置文件中的 <location allowOverride="false"> 错误处理方法!
- win7下vs2005调试asp网页时出现“加载配置文件时出错: 未能映射路径'/' "错误
- [PHP]文件加载和错误处理
- 6、文件的路径问题、错误的处理
- vs2008调试c#网页时出现“加载配置文件时出错: 未能映射路径'/' "错误 .
- .netFramewo 4.0软件报 未能加载文件或程序集“System.Core, Version=2.0.5.0错误处理
- 使用import简化spring的配置 spring import 标签的解析 使用import或加载spring配置时,报错误There is no ID/IDREF 多个Spring配置文件import resource路径配置
- 保存时出现错误 加载配置文件时出错: 对路径 的访问被拒绝
- C#中调用DLL时未能加载文件或程序集错误处理方法
- android so文件的加载过程以及常规错误处理
- PHP笔记5-流程控制,文件加载,错误处理
- C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)
- Nconf生成配置文件时错误处理
- HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
- TTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 由vs 2005升级到vs 2008后,运行时出现错误:未能加载文件或程序集“System.Web.Extensions, Version=2.0.0.0, 怎么办?
- http请求本地文件,路径中含有空格的处理 QT
- 读取properties配置文件的路径的处理方法
- Tomcat项目加载错误之不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
- UTL_FILE 加载文件处理