PHP跨目录引用文件失败:include调用提示目录未找到
先确认下你的文件夹结构是这样的对吧:
根目录/ ├── includes/ │ └── header.php ├── category/ ├── nav.php ├── content.php └── content_form.php
你遇到的「目录未找到」报错,核心问题是相对路径的解析基准不符合预期,下面给你拆解原因和具体解决办法:
为什么会报错?
如果你是直接双击打开content.php(通过file://本地协议访问),PHP的工作目录并不是你项目的根目录,而是你的系统默认目录(比如Windows的用户文件夹、macOS的个人目录),这时候它自然找不到includes/header.php。哪怕你在根目录打开文件,只要没通过Web服务器访问,相对路径的解析逻辑就会乱掉。
具体解决方法
方法1:用__DIR__常量拼接绝对路径(最推荐)
__DIR__是PHP内置常量,会返回当前文件所在的绝对目录路径,用它来拼接引用路径,完全不会受工作目录影响。把content.php里的引用代码改成:
include(__DIR__ . '/includes/header.php');
这样不管你是本地测试还是部署到服务器,都会精准从content.php所在的根目录出发,找到includes里的header.php。
方法2:用$_SERVER['DOCUMENT_ROOT'](适合服务器环境)
如果你的项目部署在Web服务器(比如Apache、Nginx)上,$_SERVER['DOCUMENT_ROOT']会返回服务器的根目录(也就是你的项目根目录),可以这么写:
include($_SERVER['DOCUMENT_ROOT'] . '/includes/header.php');
注意:这个方法依赖服务器环境,直接本地打开file://协议的话,这个变量可能不存在,所以更适合线上或本地服务器场景。
方法3:通过Web服务器访问,而非直接打开文件
不要双击打开content.php,先配置好本地服务器(比如XAMPP、WAMP),把你的项目根目录放到服务器的www/htdocs文件夹里,然后通过http://localhost/你的项目名/content.php访问。这时候原来的include('includes/header.php')就能正常工作了,因为此时PHP的工作目录就是你的项目根目录。
额外检查项
- 确认
includes文件夹和header.php的拼写完全正确(Linux服务器大小写敏感,Windows虽然不敏感,但建议统一写法避免后续部署踩坑); - 检查文件权限:如果是Linux/macOS环境,确保Web服务器进程有读取
includes文件夹和header.php的权限(可以用chmod 644 header.php、chmod 755 includes设置)。
内容的提问来源于stack exchange,提问作者Ashutosh dwivedi

