文件载入。带盘符的绝对路径 与 './file.php' '../file.php' 'file.php'

来源:互联网 发布:kpmg 大数据招聘 编辑:程序博客网 时间:2024/05/03 19:19

require include require_once include_once
以上4个语法,功能一致,效果略有不同!
引入文件路径时不要出现 ‘/file.php’ !
1可以用带盘符的绝对路径
2 ‘./file.php’ 当前地址下找
3’../file.php’ 当前地址的上一层
4 . ‘file.php’ 先在include_path下找,找不到,去当前浏览器地址下找,找不到,再到file.php所在的目录下找。(因为当前浏览器地址和所在目录可能不一致)

将 目标文件内的代码 载入 当前内,进行执行!
目的是为了重用某段代码!
所有试验基于虚拟主机tests.com,根目录定在htdocs/test文件夹

试验1 目录结构test文件夹下-header.html-require.php-footer.phprequire.php 代码<?php//将头部引入require './header';echo '我是主体内容';for($i=1; $i<=10; ++$i) {    echo $i, '&nbsp;';}//将脚部引用require './footer.php';
header.html代码<!DOCTYPE html><html> <head><meta charset='utf-8'/></head><body> <?php echo "我是头部!"; echo '<hr/>'?> 在html中无法执行php代码。只把php当做普通的字符串来对待,没有当做php代码。
footer.php代码<?phpecho '<hr/>';header('content-Type:text/html;charset=utf-8');echo '我是footer!';?></body></html>

运行tests.com/require.php ,正常

tip1:
载入,并不是直接去执行被载入的文件,而是将被载入的文件内的代码,加载到当前,检查语法没问题然后再去执行!

tip2:
一个php文件,php先从头到尾检查一遍有没有语法错误,这个过程只检查不执行任何代码。一旦发现语法错误,立即报错,不会执行任何代码。如果没有语法错误,再从第一行开始执行代码。

tip3:
在一个文件里引入另一个文件,独立编译各源文件,但是哪里引入文件,就在哪里执行。

如何证明独立编译?在a.php中echo 'a';require './b.php';echo 'END';在b.php中故意写错语法,不带分号echo 'b'运行结果:a报错1.说明独立编译。require './b.php';之前的echo 'a'执行了,可见是独立编译的,如果是连带b.php全部编译完才执行,就会直接报错,不会有任何输出.2.说明a.php编译完执行到require 'b.php'时才去载入'b.php'; 先进行b.php独立编译工作再在a.php中执行b.php的代码。3.因为必须执行当前行成功才能执行下一行,也就是说include 'b.php'中编译成功,而且每行都执行成功后,a.php 中require'./b.php'才执行成功,才能执行后面的代码echo 'END';

文件地址(磁盘地址)和网络资源地址

文件地址用于描述,一个文件在磁盘上的位置,文件载入是在磁盘上查找文件!16.php:e:/php1016/apache/htdocs/test/16.php(磁盘上的文件位置就是文件路径,在当前的文件系统上查找)备注:不同的操作系统拥有不同的文件系统。网站的架构是bs,浏览器要向服务器请求资源,是一个网络上的资源地址如<img src='http://www.aimage.com/images/image.jpg'/>正常而<img src='e:/php1016/apache/htdocs/test/16.php'/>//报错 <a href=''></a><div style="backgroundimage:url('http://www.aimage.com/images/image.jpg')"></div>
require所使用的是 磁盘上的文件位置!分成,相对路径与绝对路径。取决于当前的操作系统,它能支持什么样的路径,php才能写什么样的路径
相对路径相对于当前位置的某个文件的位置。典型的相对地址的写法如下:./ 表示当前下 ./file.php../ 表示当前上级目录 ../file.php试验2 目录结构htdocs文件夹-file.php       echo 'in htdocs';-test文件夹--file.php--require.php   echo 'in htdocs/test';

require.php代码

<?phprequire './file.php';require '../file.php';
运行tests.com/require.php结果:in htdocs/testin htdocs

path/file 直接以目录名或者文件名开头。sub/file.php 表示当前目录下的sub/file.php

test下require.php代码<?phprequire 'sub/file.php';test/sub下file.php代码<?phpecho 'in test/sub/file.php';
运行tests.com/require.php结果:in test/sub/file.php

格外注意,当前位置的确定,不是由require这行代码写在哪个文件中确定的,而是由当前代码在哪里执行确定!
看看执行当前代码时浏览器请求的资源位置,就是当前位置!

htdocs/test下require.php中代码<?phprequire 'sub/sub.php';test/subsub.php代码<?phpecho 'in_sub';require './child.php';test/sub/child.php代码<?phpecho 'child.php';
运行结果:in_sub//报告没找到目录。因为sub.php代码中的./当前位置不是由它写在哪个脚本里决定,而是由浏览器域名地址栏中请求执行的脚本文件或者说sub.php最终被包含进的文件决定的。require(): Failed opening required './child.php'
./file.php与 file.php的区别./file.php只会在当前地址下找查找!file.php先在当前地址下查找,如果没有,会在代码所在文件目录下再查找!上面的sub.php代码改成echo 'in_sub';require 'child.php';//在当前地址下找,找不到,再在代码所在文件目录下再查找!
运行结果:in_subchild.php//找到了!//如果可以确定 文件就在当前地址下,应该使用 ./file.php增加效率!
file.php除了可以在所在文件目录下查找,还有一个功能。大家可以设置其查找目录!因此,按照下面的方式查找:require 'file.php'  1先从用户定义的目录里找  2从当前地址找  3从当前脚本所在目录找include_path是一个php的配置,用于配置用户查找文件的位置!默认位置为:c:\php\pear注意:include_path 只针对 file.php 这类的路径有效!(直接以文件夹或者文件开始的路径,sub/../child.php这样是可以的,而直接以./  ../开始是不行的)

test文件夹下require.php

<?phprequire 'single.php';c:\php\pear下single.php<?phpecho 'pear/single';//运行tests.com/single.php   正常!//改成require './single.php';  报错:: Failed opening required './single.php' 
如果可能设置该配置项include_path的值,就可以做到:将所有被载入的文件,集中放在某几个目录内,载入时直接写文件名即可,省掉的冗长的路径的部分!设置 include_path利用函数:set_include_path();set_include_path('c:/xampp/htdocs/test/requires');include 'require1.php';就会去requires目录下找!在设置时,后设置的会将前面设置的(c:\php\pear)覆盖掉!因此,典型的设置应该将已有的值,拿到,再重新设置上!取得当前的include_path的值:利用函数:get_include_path()可以获得当前的include_path的值!

注意上面的路径分隔符,使用的分号!
windows下:分号;
linux下:冒号:
PHP使用预定义常量:
PATH_SEPARATOR来保存当前操作系统的路径分割符!

var_dump(PATH_SEPARATOR);set_include_path('c:/xampp/htdocs/test/requires’. PATH_SEPARATOR . get_include_path());

因此建议,项目中(目录结构复杂),最好使用绝对路径!
因为同一个路径在不同的文件中被载入时,路径会发生错误。
而使用绝对路径,在哪个文件中载入都可以

绝对路径
文件在磁盘上的真实位置!
在windows上,绝对路径就是带盘符的路径!

将某部分,定义成常量!define('ROOT_DIR', 'e:/php1016/apache/htdocs/test/');require ROOT_DIR . 'sub/child.php';
0 0