ThinkPHP6.0通过正确命名的.env文件管理环境变量,需重命名为纯.env、严格遵循键值对格式、在框架启动前加载,并确保Web/CLI环境下变量透传生效。

ThinkPHP6.0 通过 .env 文件管理环境变量,但不是简单放个文件就生效——它需要正确命名、规范格式、时机加载,并配合运行环境传递。核心是让 APP_ENV 和 APP_DEBUG 这类关键变量在框架启动前就可用。
确保 .env 文件存在且命名正确
安装后项目根目录(与 vendor 同级)默认只有 .example.env。必须重命名为 .env 才会被自动加载。注意:
- 文件名必须是纯
.env,不能带后缀或空格,如.env.local或.env.php不会被识别 - 生产环境部署时,建议将
.env从 Git 排除(加入.gitignore),避免敏感信息泄露 - 若使用多环境(如 dev/test/prod),需手动加载对应文件(见下文“按环境加载”部分)
书写格式必须严格规范
.env 是键值对文本文件,不支持注释嵌套、引号包裹或空格分隔。错误写法会导致变量读取失败:
- ✅ 正确:
APP_DEBUG=true、DB_HOST=127.0.0.1、REDIS_PORT=6379 - ❌ 错误:
APP_DEBUG = "true"(含空格和引号)、# APP_DEBUG=true(# 开头不被识别为注释)、APP_DEBUG: true(冒号语法无效) - 层级变量用点号连接,如
DATABASE.USERNAME=root,读取时用env('database.username')
按环境加载不同 .env.* 文件(可选增强)
TP6 默认只加载 .env,但可通过手动扩展支持多环境配置。例如:
- 创建
.env.development、.env.production等文件 - 在
public/index.php或think入口早期加入加载逻辑:
php
if (!getenv('APP_ENV')) {
putenv('APP_ENV=' . ($_SERVER['APP_ENV'] ?? 'production'));
}
$envFile = __DIR__ . '/../.env.' . getenv('APP_ENV');
if (is_file($envFile)) {
Dotenv\Dotenv::createImmutable(__DIR__ . '/..', basename($envFile))->load();
}
- 这样就能根据系统设置的
APP_ENV=production自动加载.env.production,覆盖基础.env中的同名变量
Web 与 CLI 环境都要确保变量真正生效
.env 加载只是第一步,变量还必须进入 PHP 的 $_ENV 或 getenv() 才能被框架读取:
-
Nginx:在
fastcgi_param中显式透传,例如:fastcgi_param APP_DEBUG $APP_DEBUG;,并在 Nginx 配置中定义set $APP_DEBUG "true"; -
Apache:用
SetEnv APP_DEBUG true或PassEnv APP_DEBUG,确保模块mod_env已启用 -
CLI/Swoole:启动前执行
export APP_DEBUG=true,或在脚本开头调用putenv('APP_DEBUG=true')(注意要在think\App::init()之前) - 修改
.env后,Web 服务需重启(PHP-FPM/Nginx/Apache),CLI/Swoole 进程必须重新启动,OPcache 也要清空(opcache_reset())
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











