最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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) - 注意:
default和connections是顶层键,不用 env;但它们内部每个连接的字段都要单独处理
.env 文件必须合规放置与书写
位置和格式错一点,整个机制就断掉。
- 文件必须放在项目根目录(和
app/、config/、public/同级),不是config/下,也不是public/里 - 变量名全大写 + 下划线:
DB_HOST✅,db_host或DB-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.10和DB_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 判断
相关文章
- 猫王小黄鸭 07-21
- 日落海滩时尚人像 07-21
- iOS哔咔网页版入口-哔咔漫画iOS网页版入口 07-21
- 高级定制时装风暴巨片 07-21
- 卧室抓拍人像生活方式 07-21
- 影棚电影级时尚肖像 07-21