以前确实没有怎么在意这个问题,但是在昨天帮助同事调试代码的时候,在a文件里引入b文件b文件里又引入c文件却提示c文件不存在,仔细核对了N遍路径没绝对问题,后来同事在b文件引入的时候改用了绝对路径(以前使用的相对路径),神奇的尽然可以了。带着疑惑百度看了一些文章大致明白了原因。
先把目录结构图放上
先来了解两个概念:
1.当前目录 :当前文件的目录
2.工作目录 :当前脚本运行的目录
php和其他语言处理引入文件的方式不大一样,到底是不是真的不一样也没实际的实验过。php是这样处理的:如果引入文件是./或../等相对路径它会去当前工作目录去查找该引入文件。其实看到这里我想你已经明白原因出在那里了。
模拟一下程序运行的步骤
a.php :
1.程序按照路径引入c.php,成功。
2.执行c.php,准备引入b.php。php发现使用的是相对路径,它会在当前工作目录查找b.php。现在的工作目录是dir0也就是说这个文件应该和dir0同级,显然这个文件不存在。程序报错不再继续执行。
为了验证猜测是否正确现在我把目录结构改成如下:
运行a.php 输出:我是b.php
这种办法在项目开发中肯定是不建议使用的,建议能使用绝对路径就使用绝对路径,还有几个函数可以看一下
include_path , realpath , dirname , __FILE__