在index.php中调用product_class.php出现require_once路径错误如何解决
报错原因
你遇到的是PHP相对路径计算规则的问题:
- PHP计算相对路径时,是以当前正在执行的入口文件的目录为基准,不是以被引入的文件自身所在目录为基准
- 单独运行
product_class.php时,执行目录是product文件夹,../Includes/config/general.php路径可以正确指向目标文件 - 从根目录的
index.php引入product_class.php时,执行目录是根目录,此时product_class.php里写的../Includes/会变成从根目录的上层目录查找文件,自然找不到
同时你的index.php引入顺序也存在逻辑问题:先引入依赖general.php的product_class.php,后引入general.php,即使路径修复也会出现依赖缺失问题。
解决方案
下面按稳妥程度排序,推荐优先使用第二种/第三种方案:
临时快速修复
- 先调整
index.php的引入顺序,先引入general.php再引入product_class.php - 直接删除
product_class.php里的require_once('../Includes/config/general.php')代码,避免重复引入
调整后index.php代码:
<?php require_once('Includes/config/general.php'); require_once('product/product_class.php'); require_once INCLUDES_DIR.'/database.php'; ?>- 先调整
用
__DIR__常量写绝对路径(推荐)
把所有require_once的路径改成基于__DIR__的绝对路径,彻底避免相对路径混乱问题:
修改product_class.php第二行的代码为:require_once(__DIR__ . '/../Includes/config/general.php');__DIR__会自动指向product_class.php所在的product文件夹的绝对路径,拼接后不管在哪里引入该文件,路径都能正确解析。全局定义根目录常量(适合多文件引入的项目)
在入口文件index.php最开头先定义根目录常量,所有文件的引入都基于这个常量:<?php // index.php最顶部添加 define('ROOT_PATH', __DIR__); require_once(ROOT_PATH . '/Includes/config/general.php'); require_once(ROOT_PATH . '/product/product_class.php'); require_once ROOT_PATH . '/Includes/database.php'; ?>后续其他文件的引入统一用
ROOT_PATH拼接路径即可,比如product_class.php里可以写:require_once(ROOT_PATH . '/Includes/config/general.php');
内容的提问来源于stack exchange,提问作者Josua Hero Hutabarat
相关产品推荐
相关产品推荐

