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

PHP使用相对路径时出现No such file or directory错误求助

PHP多层require_once相对路径报错解决方案

问题描述

在多层文件引用场景中,使用require_once相对路径时仅最后一层出现错误:

Warning: require_once(../db_controller.php): Failed to open stream: No such file or directory in D:\Setup\xampp\htdocs\BOB2.1\Teacher-Assistant-SW\models\user\user.php on line 3

引用链:

  • 第一层:require_once '../models/user/student.php';
  • 第二层:require_once 'user.php';
  • 第三层:require_once '../db_controller.php';
    仅使用完整绝对路径能正常运行。

核心原因

PHP的相对路径是基于当前执行脚本的工作目录,而非被引用文件的所在目录。例如:假设最初执行的脚本在Teacher-Assistant-SW/根目录,当执行到user.php里的../db_controller.php时,PHP会从根目录向上查找(../指向根目录的上级),而非从models/user/向上定位到models/目录下的db_controller.php,最终导致路径匹配失败。

解决方案

1. 使用__DIR__常量(推荐)

__DIR__代表当前文件所在的绝对目录,用它拼接路径能确保引用基于当前文件位置,不受执行脚本影响。
修改user.php中的引用代码:

require_once __DIR__ . '/../db_controller.php';

__DIR__对应D:\Setup\xampp\htdocs\BOB2.1\Teacher-Assistant-SW\models\user,拼接后自动指向正确的models/db_controller.php路径。

2. 定义根目录常量

在项目入口脚本(比如根目录的index.php)中定义根目录常量,所有文件引用都基于这个常量构建路径:

// 入口脚本中定义根目录常量
define('PROJECT_ROOT', realpath(__DIR__));

// 在user.php中引用目标文件
require_once PROJECT_ROOT . '/models/db_controller.php';

3. 配置include_path

将项目根目录加入PHP的include_path,之后引用可直接使用相对于根目录的路径:

// 入口脚本中设置include_path
set_include_path(get_include_path() . PATH_SEPARATOR . realpath(__DIR__));

// 在user.php中引用目标文件
require_once 'models/db_controller.php';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37