thinkphp的.env文件必须满足路径、格式、加载时机和配置引用四条件才生效:需置于根目录、utf-8无bom编码、等号无空格且值含特殊字符须加单引号、变量全大写下划线、配置文件中显式调用env('key','default')并清缓存。

ThinkPHP 的 .env 文件不是“放进去就生效”,必须满足路径、格式、加载时机和配置引用四个条件,缺一不可。
.env 文件位置与编码要求
文件必须放在项目根目录(与 app/、config/、public/ 同级),不能放在 public/ 或 config/ 下。保存为 UTF-8 无 BOM 编码——带 BOM 会导致 ThinkPHP 8 完全静默忽略该文件。
- 推荐用 VS Code 或 Notepad++ 新建并另存为 UTF-8(无签名)
- Linux/macOS 下可用
file -i .env检查编码;Windows 记事本默认可能加 BOM,务必避免 - 确保文件可读:Web 服务器用户(如 www-data)需有读取权限
.env 格式必须严格规范
vlucas/phpdotenv 解析器对空格、引号、大小写极其敏感,一处出错整行失效,且不报具体错误。
- 等号两侧绝对不能有空格:
DB_HOST=127.0.0.1✅,DB_HOST = 127.0.0.1❌ - 值含空格、
@、!、#等特殊字符时,必须用单引号包裹:DB_PWD='pass@123!'✅ - 注释只能独占一行,以
#开头,前面不能有空格;不支持行末注释 - 变量名必须全大写 + 下划线:
DB_PREFIX✅,db_prefix或DB-Prefix❌
配置文件中必须显式调用 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免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











