一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ThinkPHP 数据库配置文件 + .env 分离写法【实战】

时间:2026-07-10 10:10:52 编辑:袖梨 来源:一聚教程网

ThinkPHP数据库环境分离关键在于database.php必须用env()显式读取.env变量并设默认值,.env需放根目录、全大写下划线命名、等号无空格、特殊字符加单引号,修改后须执行php think clear:config清缓存。

ThinkPHP 数据库配置要真正实现环境分离,关键不是“把参数挪到 .env”,而是让 database.php 主动、正确地读取它——否则改了 .env 也完全不生效。

database.php 必须用 env() 显式读取变量

所有可能随环境变化的字段,都得包裹 env() 并提供默认值。不能写死,也不能只靠框架自动映射。

  • hostname'hostname' => env('DB_HOST', '127.0.0.1')
  • database'database' => env('DB_NAME', 'tp_dev')
  • username / password'username' => env('DB_USER', 'root')'password' => env('DB_PASSWORD', '')
  • port / prefix / type 同理,比如 'hostport' => (int) env('DB_PORT', 3306)
  • 注意:defaultconnections 是顶层键,不用 env;但它们内部每个连接的字段都要单独处理

.env 文件必须合规放置与书写

位置和格式错一点,整个机制就断掉。

  • 文件必须放在项目根目录(和 app/config/public/ 同级),不是 config/ 下,也不是 public/
  • 变量名全大写 + 下划线:DB_HOST ✅,db_hostDB-Host
  • 等号两侧不能有空格DB_PASSWORD=abc123 ✅,DB_PASSWORD = abc123
  • 含特殊字符(如 @!)必须加单引号:DB_PASSWORD='pass@123!'
  • 空值要写成 DB_PREFIX='',不能只写 DB_PREFIX=

修改后必须清缓存才生效

ThinkPHP 会缓存配置,改了 .env 不执行清理命令,系统仍用旧值。

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

  • 运行命令:php think clear:config
  • 验证是否生效:执行 php think env,看输出是否包含你刚写的 DB_* 变量
  • 如果用 CLI 命令(如 php think migrate)连不上,大概率是缓存没清,或 env() 没写对位置

多库或多环境进阶写法

需要区分主从、开发/生产库、或多个业务库时,.env 和 database.php 要配合扩展。

  • 主从分离:在 .env 写 DB_MASTER_HOST=192.168.1.10DB_SLAVE_HOST=192.168.1.11,database.php 中分别调用 env('DB_MASTER_HOST')env('DB_SLAVE_HOST')
  • 多连接命名:在 connections 数组里定义 'log_db''report_db' 等键,每个键内部字段都走 env()
  • 环境标识:通过 APP_ENV=prod 控制行为分支,比如日志级别、调试开关,但数据库连接本身仍由 env() 驱动,不依赖 APP_ENV 值做 if 判断

热门栏目