关于PHP include文件时的文件查找顺序

常常被include文件的路径搞晕。 看来是要理一理的时候了。

PHP官方文档关于include搜索路径的解释是:先查找工作目录下相对于include_path设置所对应的路径,然后再搜索执行文件所在目录相对于include_path设置所对应的路径,如果两个总都不存在,说明文件不存在。对于绝对路径和以./..开头的路径,搜索的路径仅为工作目录。

上面这段话理解起来真是有点难。我们拆分来理解吧。

首先要知道什么是工作目录:简单的理解就是入口文件所在的目录(对于命令行模式的PHP,就是执行php命令所在的目录了,请参阅PHP CLI与CGI 和 PHP日志)。比如说你网站根目录是/www/,在/www/下有一个main.php文件,你的域名是www.domain.com,你访问http://www.domain.com/main.php,执行main.php时,工作目录就是/www/

接下来解释一下上面所说的执行文件所在的目录:比如有两个文件 /www/main.php, /www/include/b.php 其中,main.php里面有一句 include 'include/b.php'。在执行到b.php里面的内容时,执行文件所在目录就是指/www/include/

以一个具体例子做为解释:

根目录为/www/,include_path设置为是.(当前目录),文件结构:

/www/
/www/main.php
/www/include/a.php
/www/include/b.php

main.php代码如下:

<?php
include 'include/a.php';

a.php代码如下

<?php
echo 'a.php<br />';
include 'b.php';
include 'include/b.php';

b.php代码如下:

<?php
echo 'b.php<br />';

运行结果如:

a.php
b.php
b.php

解读a.php里的两个include是怎么搜索文件的。

include 'b.php': 先搜索/www/b.php,搜索不到时搜索/www/include/b.php

inlucde 'include/b.php':先搜索/www/include/b.php,搜索不到时搜索/www/include/include/b.php

按上面的搜索顺序,都是可以搜索到b.php文件的,所以没有错误。

注意上面说到的对于./..开头的路径只是搜索工作目录,可以通过修改a.php文件测试一下:

<?php
//所了.前缀
echo 'a.php<br />';
include './b.php'; //搜索/www/b.php,这个文件是不存在的。
include './a/b.php';

结果:

aaarticlea/png;base64,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" alt="" />

上一篇:php中include文件变量作用域的研究


下一篇:modelsim无法识别include文件的解决方法