ThinkPHP 5.1 支持通过根目录 .env 文件实现多环境配置分离,需用 INI 格式、全大写下划线命名,节名自动转命名空间,变量通过 env() 函数读取并强制类型转换,部署时须忽略 .env、设权限 600 并禁止 Web 访问。

ThinkPHP 5.1 支持通过 .env 文件设置环境变量,实现开发、测试、生产等多环境配置分离,避免硬编码和手动切换 config 文件。
在项目根目录创建 .env 文件
.env 必须放在项目根目录(即与 public 同级),不是 application 或 config 目录下。文件采用 INI 格式,不区分大小写,但推荐全大写加下划线命名:
APP_DEBUG = trueAPP_TRACE = true[DATABASE]HOSTNAME = 127.0.0.1DATABASE = myapp_prodUSERNAME = dbuserPASSWORD = securepassHOSTPORT = 3306PREFIX = tp5_
注意:.env 中的 APP_DEBUG 和 APP_TRACE 会自动生效,覆盖应用配置;其余变量需显式读取。
在配置文件中使用 env() 助手函数
打开 config/database.php 等配置文件,用 env() 替换固定值:
立即学习“PHP免费学习笔记(深入)”;
'hostname' => env('database.hostname', '127.0.0.1'),'database' => env('database.database', 'myapp_dev'),'username' => env('database.username', 'root'),'password' => env('database.password', ''),-
'hostport' => (int) env('database.hostport', 3306),(数值类型建议强制转换)
层级用点号分隔,方括号定义的节(如 [DATABASE])自动转为一级命名空间,无需重复写节名。
确保环境变量生效的关键点
- 确认
thinkphp/library/think/Env.php已加载(框架默认启用,无需额外引入) - 部署时务必在
.gitignore中加入.env,防止敏感信息泄露 - 修改
.env后,如遇配置未更新,清空runtime/config/缓存目录 - Web 服务器(Nginx/Apache)需正确指向
public/目录,否则.env可能因入口路径异常而未被读取 - 若
env()返回null,检查拼写是否匹配(如database.hostname不是db.hostname)
不同环境共用同一套代码的实践方式
本地开发用一份 .env,上线前在服务器上单独部署另一份(内容为生产数据库、关闭调试等),并确保:
- 该文件权限设为
600(仅所有者可读写) - PHP 进程用户有读取权限(如 Nginx 使用
www-data,则chown www-data:www-data .env) - 禁用 Web 直接访问:
location ~ /\.env { deny all; }(Nginx 配置中添加)



















