为何require_once根路径引用失效,相对路径与a标签根路径却正常?
为什么PHP的
require_once根路径写法不生效,但HTML链接却可以? 这是个非常容易混淆的点,我来帮你拆解清楚两者的差异:
核心原因:两者的「根路径」不是同一个东西!
- HTML里的
/是「网站根目录」:也就是你的Web服务器(比如WAMP里的Apache)配置的站点根目录,在你的环境里就是C:\wamp64\www\。所以<a href='/include/common.php'>实际指向的是C:\wamp64\www\include\common.php,这个文件是存在的,所以能正常访问。 - PHP里的
/是「服务器系统的根目录」:在Windows系统里就是磁盘的根目录C:\,在Linux/macOS里是/。所以你写的require_once '/include/common.php',PHP会去查找C:\include\common.php——这个路径显然不存在,自然就会抛出「找不到文件」的错误。
解决方法:让PHP的路径和HTML逻辑对齐
这里给你几个实用的方案:
1. 用$_SERVER['DOCUMENT_ROOT']获取网站根目录
这是最直接的方法,$_SERVER['DOCUMENT_ROOT']会返回Web服务器配置的站点根路径(也就是你HTML里/对应的路径)。修改代码为:
require_once $_SERVER['DOCUMENT_ROOT'] . '/include/common.php';
这样就会精准指向C:\wamp64\www\include\common.php,和HTML链接的路径逻辑完全一致。
2. 定义一个全局根路径常量
如果你的项目结构比较复杂,可以在入口文件(比如index.php)里定义一个根路径常量,后续所有文件都用这个常量来引用:
// 在项目根目录的入口文件里定义 define('PROJECT_ROOT', dirname(__FILE__) . '/');
然后在需要引用的文件里:
require_once PROJECT_ROOT . 'include/common.php';
这种方式更灵活,尤其是当你的项目部署路径变化时,只需要修改常量的定义即可。
3. 规范相对路径(可选)
如果你不想用绝对路径,也可以继续用相对路径,但建议统一以项目根为基准来计算相对层级,避免层级变化导致路径失效。比如你当前文件在src/views/search.php,相对项目根www的路径是../..,所以../../include/common.php是可行的,但如果后续文件移动位置,就得同步修改相对层级,维护成本略高。
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

