PHP 数据库配置文件设计规范建议

5次阅读

数据库配置须分离代码与敏感信息,禁用明文密码提交,通过环境变量(如$_env)或dotenv加载,按环境物理分离配置文件,显式设置charset和pdo选项,严禁日志输出密码等敏感值。

PHP 数据库配置文件设计规范建议

数据库配置文件php 项目中关键的敏感信息载体,设计时需兼顾安全性、可维护性与环境适配能力。核心原则是:配置与代码分离、敏感信息不硬编码、不同环境使用独立配置、禁止提交明文密码到版本库。

使用环境变量隔离敏感配置

避免在配置文件中直接写入数据库密码、用户名等。推荐通过环境变量注入,如使用 $_ENVgetenv() 读取:

  • 在 Web 服务器(如 nginx/apache)或 CLI 启动脚本中设置 DB_HOST=localhost DB_USER=app DB_PASS=xxx
  • PHP 中统一读取:$host = $_ENV['DB_HOST'] ?? '127.0.0.1';
  • 搭配 .env 文件(仅本地开发) + vlucas/phpdotenv 加载,但确保 .env 已加入 .gitignore

按环境拆分配置结构

不建议用 if-else 判断环境来切换参数,而应采用物理分离或自动加载机制:

  • 目录结构示例:config/database/production.phpconfig/database/staging.phpconfig/database/local.php
  • 运行时根据 APP_ENV=production 自动加载对应文件,主配置文件只做兜底和合并逻辑
  • 所有环境配置文件均不提交密码,密码始终由环境变量补充

配置项命名清晰且保持最小必要

只暴露真实需要控制的参数,避免冗余字段。典型安全配置应包含:

立即学习PHP免费学习笔记(深入)”;

  • hostportdbnameusernamepassword(全部动态获取)
  • charset:显式设为 utf8mb4,避免连接层乱码
  • options:启用 PDO::ATTR_EMULATE_PREPARES => falsePDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  • 禁用 unix_socket 等非常规连接方式,除非明确需要

禁止写入日志或错误输出敏感值

配置加载后,严禁将完整配置数组(尤其含 password)用于 var_dumperror_log 或异常上下文:

  • 调试时如需确认连接参数,可单独打印 host/port/dbname,跳过 password 和 username
  • 异常捕获中若需记录数据库问题,仅记录错误码和 sql 状态,不拼接凭证
  • 上线前检查所有 print_r($config) 类语句是否已移除或注释
text=ZqhQzanResources