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

PHP嵌套文件包含报错:仅修改innerRunner.php如何解决?

问题解决:PHP相对路径引入文件报错

问题场景

项目文件结构:

\+-- config
|   +-- config1.php
|   +-- config2.php
\+-- test
|   +-- test1
|      +-- innerRunner.php
\+-- outerRunner.php

各文件代码:

  • config1.php:
<?php
require_once 'config/config2.php';
  • config2.php:
<?php
function runConfig2(){
    echo "control in config2";
}
runConfig2();
  • innerRunner.php(原代码):
<?php
require_once("../../config/config1.php");
  • outerRunner.php:
<?php
require_once("config/config1.php");

运行outerRunner.php正常,但运行innerRunner.php时出现错误:

Warning: require_once(config/config2.php): Failed to open stream: No such file or directory in /var/www/config/config1.php on line 2

Fatal error: Uncaught Error: Failed opening required 'config/config2.php' (include_path='.:/usr/local/lib/php') in /var/www/config/config1.php:2 Stack trace: #0 /var/www/test/test1/innerRunner.php(2): require_once() #1 {main} thrown in /var/www/config/config1.php on line 2

限制条件:无法修改config1.php或config2.php,仅能修改innerRunner.php

问题原因

PHP中相对路径的解析是基于当前执行脚本的工作目录,而非被包含脚本所在的目录。运行innerRunner.php时,工作目录为/var/www/test/test1/,config1.php里的require_once 'config/config2.php';会尝试在/var/www/test/test1/config/config2.php查找文件,该路径不存在,因此报错。

解决方案

修改innerRunner.php,切换当前工作目录到项目根目录后再引入config1.php:

<?php
// 切换到项目根目录(/var/www/)
chdir(dirname(__DIR__, 2));
require_once("config/config1.php");

代码解释

  • __DIR__表示当前脚本(innerRunner.php)所在的目录/var/www/test/test1/
  • dirname(__DIR__, 2)表示向上回溯2级目录,得到项目根目录/var/www/
  • chdir()切换工作目录到根目录后,config1.php里的相对路径会基于根目录解析,和outerRunner.php运行时的环境一致,就能正确找到config2.php

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:01:06