PHP项目引入layout文件夹内文件异常的规范写法咨询
PHP文件引入路径异常解决方案
问题根因
include使用相对路径查找失败的核心是PHP的文件查找优先级规则:会优先查找php.ini中配置的include_path目录,其次查找当前执行入口脚本的所在目录,最后才会查找写include语句的当前脚本所在目录。如果项目有多个不同层级的入口文件,相对路径的基准目录会动态变化,就会出现引入失败的问题。- 你当前写两次
include的写法存在较高风险:如果后续目录结构调整、或者出现同名文件,很容易出现重复引入、引入错误文件的问题,不符合项目可维护性要求。
最佳实践方案
方案1:基于根目录常量的绝对路径引入(最推荐)
在项目全局入口文件中提前定义项目根目录的绝对路径常量,所有文件引入都基于该常量编写,完全不受入口层级影响:
// 在项目根目录的入口文件中添加全局常量定义 define('PROJECT_ROOT', __DIR__); // 后续所有业务页面引入公共文件统一写法 include PROJECT_ROOT . '/layout/header.php';
__DIR__是PHP原生魔术常量,会返回当前代码所在文件的绝对目录路径,不会随执行入口变化。
方案2:调整include_path配置(适合多公共目录场景)
如果你的项目有多个存放公共文件的目录,可以在入口文件中统一把公共目录加入include_path,之后直接写文件名即可引入:
// 全局入口中添加配置,把layout目录加入引入路径 set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/layout'); // 业务页面直接引入文件名即可 include 'header.php';
方案3:临时兼容处理(不推荐长期使用)
如果不想调整全局配置,也可以在写include语句时基于当前文件的路径补全相对关系:
// 路径层级根据当前脚本和layout目录的相对位置调整 include __DIR__ . '/layout/header.php';
内容的提问来源于stack exchange,提问作者Ahmed Zaki
相关产品推荐
相关产品推荐

