.env文件必须放在项目根目录,与app/、config/、public/同级;放错位置(如public/或config/内)会导致框架静默失效、env()返回null、敏感信息泄露或加载失败。

不是 public/ 下,也不是 config/ 或 application/ 里——放错位置会导致 ThinkPHP 完全不加载它,且不报错、不提示,静默失效。
为什么不能放错位置
ThinkPHP 的 Dotenv 加载器默认只扫描项目根目录(即 __DIR__.'/..')下的 .env 文件。如果放在 public/.env,框架启动时根本找不到;若放在 config/.env,则需手动指定路径,违背标准流程,也容易在部署中遗漏。
常见错误位置及后果
- public/.env:Web 服务器可能直接将其作为静态文件输出,造成敏感信息泄露(如数据库密码)
- config/.env:env() 函数始终返回 null,所有依赖它的配置(如 DB_HOST、APP_DEBUG)都 fallback 到默认值
- application/.env(TP5.1 常见误放):框架不识别,等同于没写
确认是否放对了的简单方法
在项目根目录执行命令:
ls -la | grep "\.env"
应看到 .env(或 .env.dev 等)直接列在最外层。同时检查其编码:
立即学习“PHP免费学习笔记(深入)”;
- 用 VS Code 或 Notepad++ 打开 → “编码”菜单 → 确认是 UTF-8 无 BOM
- 带 BOM 的 .env 在 ThinkPHP 8 中会被彻底忽略,连 warning 都没有
多环境文件也遵循同一规则
.env.dev、.env.test、.env.prod 同样必须放在根目录,不能进子文件夹。框架通过系统变量 APP_ENV 拼接文件名读取,路径逻辑不变。



















