php include|require_once 引入文件路径问题

以前确实没有怎么在意这个问题,但是在昨天帮助同事调试代码的时候,在a文件里引入b文件b文件里又引入c文件却提示c文件不存在,仔细核对了N遍路径没绝对问题,后来同事在b文件引入的时候改用了绝对路径(以前使用的相对路径),神奇的尽然可以了。带着疑惑百度看了一些文章大致明白了原因。

先把目录结构图放上php include|require_once 引入文件路径问题_第1张图片

先来了解两个概念:

1.当前目录 :当前文件的目录

2.工作目录 :当前脚本运行的目录

php和其他语言处理引入文件的方式不大一样,到底是不是真的不一样也没实际的实验过。php是这样处理的:如果引入文件是./或../等相对路径它会去当前工作目录去查找该引入文件。其实看到这里我想你已经明白原因出在那里了。

php include|require_once 引入文件路径问题_第2张图片

php include|require_once 引入文件路径问题_第3张图片

php include|require_once 引入文件路径问题_第4张图片

模拟一下程序运行的步骤

a.php :

1.程序按照路径引入c.php,成功。

2.执行c.php,准备引入b.php。php发现使用的是相对路径,它会在当前工作目录查找b.php。现在的工作目录是dir0也就是说这个文件应该和dir0同级,显然这个文件不存在。程序报错不再继续执行。

为了验证猜测是否正确现在我把目录结构改成如下:

php include|require_once 引入文件路径问题_第5张图片

运行a.php 输出:我是b.php

这种办法在项目开发中肯定是不建议使用的,建议能使用绝对路径就使用绝对路径,还有几个函数可以看一下

include_path , realpath , dirname , __FILE__

 

你可能感兴趣的:(PHP)