include b.php,PHP中的include包含路径问题

在C语言和其他语言中include某个文件一般是以包含文件的该文件所在目录为当前目录,但是php则不然,它是以顶层的php文件所在的目录为当前目录,即a包含b,b如果包含c,此时b的当前目录为a所在目录,不是b所在目录。

首先我们来看php官方手册中对include的文件搜索原则的描述:

Files for including are first looked for in each include_path entry relative to the current working directory, and then in the directory of current script. E.g. if your include_path is libraries , current working directory is /www/ , you includedinclude/a.php and there is include "b.php" in that file, b.php is first looked in /www/libraries/ and then in /www/include/ . If filename begins with ./ or ../ , it is looked only in the current working directory.

寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。例如 include_path 是 . ,当前工作目录是 /www/ ,脚本中要 include 一个 include/a.php 并且在该文件中有一句 include "b.php" ,则寻找 b.php 的顺序先是 /www/ ,然后是 /www/include/ 。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。

和C语言一样php可以设置包含路径,set_include_path(), get_include_path();

下面给出一个例子,来说明php的include的使用。

a.php

echo "current directory".getcwd()."";

echo get_include_path()."";

include ("include/c.php");

?>

include/c.php

echo "this is file: Include/c.php";

echo "this file gcwd:".getcwd()."";

include ("d.php");

?>

include/d.php

echo "this file include/d.php";

echo "current directory:".getcwd()."";

?>

d.php

echo "this top d.php";

?>

如果d.php 和include/d.php 同时存在,

运行a.php,当前目录为网站根目录,a包含c,根据查找规则,当前目录相对的include_path优先,则查找到c。

c包含d.php文件,同样的当前目录优先,但注意此时的当前目录为a所在的目录,故查找到的d文件,为根目录下的d.php文件,如果根目录下的d文件不存在,才会查找c文件所在的目录的include_path,此时才会包含include/d.php文件。

运行效果如下:

current directory/var/www/test

.:/usr/share/php:/usr/share/pear

this is file: Include/c.php

this file gcwd:/var/www/test

this top d.php

如果根目录下的d文件不存在:

current directory/var/www/test

.:/usr/share/php:/usr/share/pear

this is file: Include/c.php

this file gcwd:/var/www/test

this file include/d.php

current directory:/var/www/test

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值