ThinkPHP 5.1 中使用 .env 模拟环境变量配置,让项目配置更清晰

一颗松果
一颗松果
发布时间:2026-08-25 | 117人浏览过
原创

前言

ThinkPHP 5.1 开始支持 .env 后,开发环境和生产环境的参数终于可以从应用配置里拆出来管理。对于经常要切换数据库、调试开关或部署多套环境的项目,这种写法比反复改 config 更省事。下面就按文件位置、读取方式和接入配置文件三个步骤,整理这套用法在项目里该怎么落地。

ThinkPHP 5.1 开始原生支持 .env 配置,这对需要区分本地开发、测试和生产环境的项目很实用。与其频繁修改 config 目录下的配置文件,不如把容易变动的参数抽出来统一管理。下面就按实际使用顺序,梳理 ThinkPHP 5.1 中 .env 的配置方式、读取方法,以及接入数据库配置时该怎么写。

ThinkPHP 5.1 支持哪些配置格式

从 ThinkPHP 5 发布以来,配置方式一直在往更灵活的方向走。到了 ThinkPHP 5.1,框架已经支持多种配置类型,包括 .ini、.xml、.json、.yaml 和 .php。

其中本文要用到的 .env,本质上就是采用 ini 风格来组织配置项。它主要用于在开发过程中模拟环境变量配置,让不同环境下的参数分离得更清楚。通常建议把这个文件加入忽略列表,避免部署时被误覆盖。

如何创建并编写 .env 文件

.env 文件需要创建在项目根目录,不是 application 目录,这一点很容易放错。

展示 ThinkPHP 5.1 中 .env 文件位置、配置分组与读取方式的暖色专栏配图
`.env` 文件放哪、写什么、怎么读把 .env 放在项目根目录后,可按分组写入环境参数,并通过 env() 或。

一个常见的配置示例如下:

APP_DEBUG =  true
APP_TRACE =  true

[DATABASE]
HOSTNAME = 127.0.0.1
DATABASE = test
HOSTPORT = 3306
USERNAME = root
PASSWORD = 123456
PREFIX = test_

这里可以看到两类内容:

  • APP_DEBUG、APP_TRACE 这类全局开关配置;
  • [DATABASE] 分组下的数据库连接参数。

这种写法的好处是,环境差异集中在一个文件里,切换机器或切换环境时不需要反复改业务配置文件。

配置写好后怎么读取

配置写入 .env 后,可以通过 Env 类读取:

// 获取环境变量 如果不存在则使用默认值root
Env::get('database.username','root');

如果你更习惯使用助手函数,也可以直接这样写:

env('database.username', 'root')

这里有两个关键点值得注意:

1. 环境变量名不区分大小写

也就是说,配置里写 USERNAME,读取时用 database.username 也是可以的,大小写不会成为问题。

展示 database.php 如何通过 env() 映射数据库参数的暖色专栏配图
数据库配置如何改成按环境读取数据库连接参数适合统一改为 env() 读取,开发与生产环境只需切换各自的 .env。

2. 并不是所有参数都会自动注入到应用配置

APP_DEBUG 和 APP_TRACE 这两个参数会自动生效,而且它们的优先级高于应用自身的配置文件。

但除此之外,像数据库主机、用户名、密码这类参数,并不会自动替换原配置,必须显式通过 Env::get 或 env() 来读取后再接入配置文件。

怎样把 .env 接入数据库配置文件

实际项目里,更常见的做法是在 config/database.php 中调用 env(),把数据库配置改成从 .env 读取:

return [
    // ……
    // 服务器地址
    'hostname' => env('database.hostname', '127.0.0.1'),
    // 数据库名
    'database' => env('database.database', 'test'),
    // 用户名
    'username' => env('database.username', 'root'),
    // 密码
    'password' => env('database.password', '123456'),
    // 端口
    'hostport' => env('database.hostport', '3306'),
    // 数据库表前缀
    'prefix' => env('database.prefix', ''),
    // ……
];

这种写法有两个直接好处:

  • 本地开发时,直接改根目录下的 .env 即可;
  • 上线到不同服务器时,只需要准备对应环境的 .env 文件,不必来回改动 config/database.php。

除了数据库配置,其他配置项也可以照这个思路处理。只要是不同环境之间可能变化的值,都可以通过 env() 读取,再交给具体配置文件使用。

上线部署时要注意什么

开发环境里用 .env 很方便,但部署时要特别注意文件管理方式。

比较稳妥的做法是:在线上单独保留一份 .env,把生产环境需要的配置填好,并确保这个文件被忽略,不要随着代码发布反复覆盖。否则一旦发布时把线上的 .env 替换掉,就可能直接影响生产环境的数据库连接或调试开关。

从使用体验看,.env 的价值就在于把“环境差异”从“应用配置”里拆出来。这样一来,日常开发不用每次都去改 config 里的参数,配置层次也会更清晰。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表