如何通过统一路径在各级目录引入public_html上级的PHP连接文件
统一路径引入文件的解决方案
方案1:定义全局路径常量
你已经验证了{$_SERVER['DOCUMENT_ROOT']}/../filename.php可正常运行,最直接的方式就是把这个固定路径定义为全局常量,仅需在项目全局加载的初始化文件中定义一次即可:
// 项目初始化阶段执行一次定义 define('COMMON_CONN_FILE', $_SERVER['DOCUMENT_ROOT'] . '/../filename.php');
后续所有层级的文件需要引入连接文件时,统一写以下代码即可,完全不需要适配当前文件所在的目录层级:
include COMMON_CONN_FILE;
方案2:修改PHP引入路径配置
如果不想每次都写常量,还可以把连接文件所在的目录加到PHP的默认引入路径列表中,同样只需要在全局初始化阶段执行一次:
// 把连接文件所在的public_html上级目录加入引入路径 set_include_path(get_include_path() . PATH_SEPARATOR . dirname($_SERVER['DOCUMENT_ROOT']));
之后所有位置引入连接文件都可以直接写文件名,PHP会自动到配置的目录中查找:
include 'filename.php';
补充说明
- 把数据库连接文件放在public_html目录外的方案本身更安全,避免了文件被外部通过URL直接访问、泄露数据库配置的风险,比放在站点根目录更合理。
- 如果是多环境部署的项目,担心
$_SERVER['DOCUMENT_ROOT']在不同服务器配置有差异,可以替换成基于根目录入口文件的相对路径写法,比如在public_html下的入口index.php里用__DIR__获取站点根目录的绝对路径:
define('COMMON_CONN_FILE', dirname(__DIR__) . '/filename.php');
dirname(__DIR__)获取的就是public_html的上级目录,和dirname($_SERVER['DOCUMENT_ROOT'])效果一致,兼容性更强。
内容的提问来源于stack exchange,提问作者mql11
相关产品推荐
相关产品推荐

