You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

虚拟目录下PHP include('includes/countries.php')加载失败求助

解决虚拟目录下PHP include路径失效的问题

这个问题我太熟悉了——虚拟目录(伪目录)下的PHP文件路径坑,核心原因是PHP的当前工作目录和你直观以为的URL路径不匹配,尤其是当虚拟目录是通过重写规则(比如Apache mod_rewrite、Nginx rewrite)映射到真实目录时,相对路径很容易失效。

你尝试的./includes/countries.php没用,是因为./对应的是PHP当前的工作目录(可以用echo getcwd();打印出来看看),而虚拟URL/list/small/对应的真实执行脚本可能还是/list/index.php,但服务器的工作目录并没有切换到/list/small/(因为这个目录根本不存在),所以相对路径自然找不到文件。

给你几个可靠的解决方案,按优先级排序:

  • 用魔术常量拼接绝对路径(最推荐)
    直接基于当前脚本的真实目录来构建路径,不管URL怎么变都不会错:

    include(__DIR__ . '/includes/countries.php');
    

    这里的__DIR__是PHP内置的魔术常量,会返回当前执行脚本所在的真实绝对目录。如果你的PHP版本低于5.3(现在几乎没人用了),可以用dirname(__FILE__)代替__DIR__。

  • 设置全局include路径
    如果你有很多文件需要引用includes目录下的文件,可以在项目入口脚本(比如index.php)开头设置include路径:

    // 把includes目录添加到全局包含路径
    set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/includes');
    // 之后直接引用文件名即可
    include('countries.php');
    

    这种方法适合大型项目统一管理依赖文件。

  • 验证当前工作目录(排查用)
    要是你想搞明白问题到底出在哪,在有问题的页面里加一行代码:

    echo "当前工作目录:" . getcwd();
    

    打印出来的路径大概率是真实的/list/,而不是虚拟的/list/small/,这就是为什么相对路径找不到文件的原因。

内容的提问来源于stack exchange,提问作者Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:53:45