在ThinkPHP数据库配置中,.env文件的变量命名规则极为严格——必须采用全大写字母加下划线分隔,不允许出现空格或特殊前缀。一旦违反规范,env('DB_HOST')将直接返回false或null,导致数据库连接立即中断。这并非可选的编码风格,而是框架底层解析器(vlucas/phpdotenv)的强制性要求。

事实上,这一限制源自ThinkPHP底层集成的vlucas/phpdotenv解析器,其设计机制决定了变量命名必须遵循特定规则——这绝非可自由选择的编码风格,而是不可逾越的硬性约束。许多初学者在刚接触ThinkPHP时,最容易在这个细节上出现疏漏,因此有必要展开详细说明。
变量命名必须全大写并以下划线分隔
所有数据库相关变量必须严格采用大写字母与下划线的组合格式,禁止使用驼峰命名、小写字母、点号或中划线。请直接参考以下示例:
- ✅ 正确:
DB_HOST、DB_NAME、DB_PREFIX、DB_PORT - ❌ 错误:
db_host、DbHost、database_host、DB-Host、DB.HOST
哪种命名方式更规范?对比之下差异一目了然。请牢记,env()函数仅识别全大写加下划线的键名,任何一个字符的错误都可能导致配置失效。
禁止添加段落标签或嵌套结构
ThinkPHP不支持INI风格的分段配置,.env文件必须采用扁平的键值对结构。切勿使用[database]这类分组头,否则将被完全忽略,变量无法被正确读取。
- ✅ 正确:
DB_HOST=127.0.0.1 - ❌ 错误:
[database]DB_HOST=127.0.0.1(完全无效)
简而言之,每行定义一个键值对,保持简洁规范,避免任何冗余格式。
大小写严格敏感,且不支持自动转换
即便在config/database.php中编写了'hostname' => env('db_host', '127.0.0.1'),同样无法生效——env()函数仅识别DB_HOST这一键名,不会进行大小写归一化或别名映射处理。换言之,使用小写命名将无法被识别。
在团队协作环境中,建议在项目根目录放置一份.env.example文件,统一声明标准变量命名规范。同时可在CI/CD流程中集成校验脚本,自动检测.env文件中是否存在非法命名(如小写字母、点号、中划线等)。这一做法能显著减少问题排查时间。
常见易混淆变量名对照表
以下是高频误写与推荐写法的对比清单,团队文档可直接引用参考:
DB_USER✅|db_user❌|DB_USERNAME❌(ThinkPHP默认不识别该命名,除非在database.php中手动定义)DB_PWD✅|PASSWORD❌|DB_PASSWORD❌(官方示例与核心约定统一使用DB_PWD)DB_PREFIX✅|TABLE_PREFIX❌|prefix❌DB_CHARSET✅|CHARSET❌|DB_ENCODING❌
现在您应该清楚了。核心原则只有一条:严格遵循官方约定的命名规范,避免自行创造缩写形式。许多线上问题的根源,最终都归结为.env文件中使用了小写变量名。
