将数据库连接文件放在站点根目录外是否为良好实践?如何优化引用路径?
问题解答
1. 数据库连接文件放在站点根目录外是否是良好实践?
是,这是非常推荐的安全开发实践。
Web 服务器默认只会对外公开站点根目录(也就是你这里的public_html文件夹)下的内容,一旦出现服务器配置异常导致PHP文件未被解析直接以文本形式返回,存放在根目录外的敏感文件(比如包含数据库账号密码的连接文件)完全不会被外部访问到,从根源上避免了数据库凭证泄露的风险。
2. 替代多级相对路径的更优方案
你现在写多层../的方式很容易因为文件目录调整就出错,有几个更稳定的写法:
- 方案1:基于站点根目录生成绝对路径
可以用dirname()配合PHP预定义的$_SERVER['DOCUMENT_ROOT']直接定位到站点根目录的上一级,不管你在哪个子目录的文件里引用,路径写法都是固定的:// 任意位置的PHP文件都可以这么写,不需要调整../的层数 include dirname($_SERVER['DOCUMENT_ROOT']) . '/dbc/connect_db.php'; - 方案2:定义全局路径常量
适合稍大一点的项目,可以直接在站点根目录public_html下新增一个公共入口配置文件,比如init.php,提前定义好全局的路径常量:
之后所有业务文件先引入这个根目录下的init.php,再直接用常量引用对应文件即可:// public_html/init.php 中的内容 define('PROJECT_ROOT', dirname(__DIR__)); // 定位到public_html的上一级目录 define('DBC_PATH', PROJECT_ROOT . '/dbc/');
后续如果要调整dbc文件夹的位置,只需要修改一次// insert.php 中的引用写法 include $_SERVER['DOCUMENT_ROOT'] . '/init.php'; include DBC_PATH . 'connect_db.php';DBC_PATH的定义即可,不需要逐个调整所有引用文件的路径。
额外安全建议:可以在
connect_db.php的最顶部加一段访问校验,避免文件被意外访问:<?php if (!defined('IN_PROJECT')) { exit('Access denied'); } // 后续数据库连接逻辑引用该文件的地方先定义常量
define('IN_PROJECT', true);即可,再加一层安全保障。
内容的提问来源于stack exchange,提问作者Isabella
相关产品推荐
相关产品推荐

