.env优先级最高,会无条件覆盖config/database.php中同名配置项;需通过env()函数读取且修改后必须清除runtime/config.php缓存才生效。

.env 的优先级高于 config/database.php。
.env 会直接覆盖 database.php 中同名配置项
ThinkPHP6 加载配置时,按固定顺序合并来源:.env 环境变量 → 运行时动态设置 → PHP 配置文件(如 config/database.php)→ 框架默认值。这意味着只要 .env 文件里定义了 DB_HOST、DB_NAME、DB_USERNAME 等键,它们就会无条件覆盖 config/database.php 中通过 env('DB_HOST', '127.0.0.1') 设置的值——注意,不是“补充”,而是“替换”。
- .env 中的键名是扁平的,例如 DB_PORT=3307,不是 database.port=3307
- config/database.php 里必须用 env() 函数读取这些值,否则 .env 修改完全无效
- 若 database.php 写死 'hostname' => '192.168.1.100',那 .env 里的 DB_HOST 就彻底被绕过
改完 .env 后必须清缓存才生效
ThinkPHP6 会把最终合并后的配置写入 runtime/config.php 缓存。哪怕 .env 和 database.php 都改对了,只要没删掉这个文件,系统仍会读旧缓存。
- 执行 php think clear:config 或手动删除 runtime/config.php
- 同时建议清理 runtime/cache/ 目录,避免其他缓存干扰
- Nginx/Apache 重启非必需,但 CLI 命令(如 php think run)需重新启动才能加载新 .env
验证是否真正生效的简单方法
在控制器或命令行中运行以下代码,直接查看最终生效的数据库配置:
- dump(config('database.connections.master'));(把 master 换成你 default 实际指向的连接名)
- 重点核对输出中的 hostname、database、username 是否与 .env 一致
- 如果还是显示 config/database.php 里的旧值,90% 是 runtime/config.php 没清,或 env() 没被正确调用
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











