thinkphp环境变量配置需同时满足路径、编码、格式、调用四条件:.env须置于根目录且utf-8无bom;等号无空格、变量全大写、特殊值加单引号;配置文件中必须用env('key','default')显式调用;修改后须清除runtime/config.php缓存。

ThinkPHP部署时环境变量配置不是放个.env就自动生效,必须满足路径、格式、加载时机、调用方式四个硬性条件,缺一不可。
文件位置与编码必须严格合规
.env文件必须放在项目根目录(与app/、config/、public/同级),不能放在子目录里。文件编码必须是UTF-8 无 BOM——带 BOM 会导致 ThinkPHP 静默跳过,不报错也不加载。
- Windows 记事本默认加 BOM,务必改用 VS Code 或 Notepad++ 新建并另存为“UTF-8 无签名”
- Linux/macOS 可用命令验证:
file -i .env,输出应含charset=utf-8,不含with bom - Web 服务器用户(如
www-data或nginx)需有读取权限
格式规范一点都不能松
ThinkPHP 依赖 vlucas/phpdotenv 解析.env,它对空格、引号、大小写极其敏感,一处出错整行失效,且不提示具体错误。
- 等号两侧绝对不能有空格:
DB_HOST=127.0.0.1✅,DB_HOST = 127.0.0.1❌ - 值含空格、
@、!、#等特殊字符,必须用单引号包裹:DB_PWD='pass@123!'✅ - 注释只能独占一行,以
#开头,前面不能有空格;不支持行末注释 - 变量名必须全大写 + 下划线:
API_TIMEOUT✅,api_timeout或API-TIMEOUT❌
配置文件中必须显式调用 env()
仅在.env里写DB_HOST=192.168.1.100毫无作用——必须在config/database.php等配置文件中,把每个字段都替换成env('KEY', 'default')形式。
- 示例:
'hostname' => env('DB_HOST', '127.0.0.1'), 'prefix' => env('DB_PREFIX', '') - 第二个参数不可省略;空字符串
''比null更安全,尤其对前缀、密码等字段 - 不能在控制器或模型里补救式调用
env()——配置加载只在入口初始化阶段执行一次
修改后必须清除配置缓存
ThinkPHP 会将所有配置(包括env()执行结果)合并写入runtime/config.php。只要缓存存在,改了.env也看不到效果。
- 执行命令清缓存:
php think clear:config或php think optimize:config(后者会重建) - 也可手动删除
runtime/config.php文件 - CLI 启动时若已设置
export APP_ENV=prod,需确认是否覆盖了.env——可在控制器中输出getenv('APP_ENV')和env('APP_ENV')对比验证
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











