您的位置:首页 > 其它

第五天 文件路径加载 错误处理

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
				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";但是如果发生的是关键的错误,将会调用默认的函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐