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

PHP各文件获取根目录路径方法及相对路径引入文件报错排查

问题原因

PHP中相对路径的计算基准是当前执行的入口脚本的工作目录,而非被引入文件自身所在的目录,这是报错的核心原因:

  • 直接访问accounting/inc/functions.php时,当前工作目录是accounting/inc,../inc/tcpdf/tcpdf.php会向上找到根目录下的inc文件夹,路径匹配所以运行正常
  • 从accounting/ajax/task.php作为入口执行时,当前工作目录是accounting/ajax,引入../inc/functions.php成功后,functions.php里的../inc/会从ajax目录向上计算,最终指向accounting/inc/tcpdf/tcpdf.php,而这个路径实际不存在,因此抛出文件找不到的错误
解决方案

1. 使用__DIR__魔术常量(最便捷)

__DIR__是PHP内置魔术常量,值为当前编写代码的文件所在的绝对目录,不受入口文件位置影响。
你可以把accounting/inc/functions.php里的引入代码修改为:

require_once __DIR__ . '/../../inc/tcpdf/tcpdf.php';

__DIR__固定为/volume1/web/accounting/inc,向上两层就到web根目录,再拼接根目录下inc文件夹的路径,无论哪个文件引入functions.php都不会出错。

2. 全局定义根目录常量(更易维护)

建议在项目根目录新增全局配置文件,提前定义项目根目录的绝对路径常量,所有文件引入都基于这个常量拼接:

  1. 在web根目录新增config.php,写入:
// 定义项目根目录绝对路径
define('ROOT_PATH', realpath(__DIR__));
  1. 所有业务文件首先引入该配置文件,后续引入其他文件都用ROOT_PATH拼接:
// 任意层级的文件引入都可以这么写
require_once ROOT_PATH . '/inc/tcpdf/tcpdf.php';
require_once ROOT_PATH . '/accounting/inc/functions.php';

3. 基于服务器文档根引入

如果服务器配置规范,也可以直接用$_SERVER['DOCUMENT_ROOT']获取web根目录的绝对路径:

require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/tcpdf/tcpdf.php';

注意:该方式依赖服务器配置,部分虚拟主机或非web入口执行的脚本(比如CLI脚本)可能返回值不符合预期,稳定性不如自定义常量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:45:02