Composer不直接管理.env文件,真正读取和注入环境变量的是vlucas/phpdotenv库;需用Composer安装后,在入口文件开头调用Dotenv::createImmutable()->load()加载,并确保.env在.gitignore中。

Composer 本身不直接管理 .env 文件,它只是用来安装和加载 PHP 包的工具。真正读取和注入环境变量的是 vlucas/phpdotenv 这个库 —— 你需要用 Composer 安装它,再在代码中主动加载它。
安装 vlucas/phpdotenv
在项目根目录运行:
composer require vlucas/phpdotenv
安装后,Dotenv\Dotenv 类就可用了,自动注册了自动加载机制。
在项目入口处加载 .env 文件
通常放在 index.php、public/index.php 或框架启动文件最开头(确保早于任何依赖环境变量的代码):
立即学习“PHP免费学习笔记(深入)”;
- 基本用法(推荐 v5+ 版本):
use Dotenv\Dotenv; $dotenv = Dotenv::createImmutable(__DIR__); $dotenv->load();
说明:`createImmutable()` 表示不允许运行时修改 .env 内容;`__DIR__` 指当前文件所在目录,确保路径指向含 .env 的项目根目录。
- 如果
.env不在项目根目录(比如放在config/下),传入对应路径:
$dotenv = Dotenv::createImmutable(__DIR__, 'config/.env'); $dotenv->load();
使用环境变量
加载成功后,`.env` 中的变量会自动注入到 $_ENV 和 $_SERVER 超全局数组,并可通过 getenv() 读取:
-
.env示例:
APP_NAME=MyApp DB_HOST=localhost DB_PORT=3306 API_KEY=sk_live_abc123
- PHP 中获取方式(任选其一):
echo $_ENV['APP_NAME']; // MyApp
echo getenv('DB_HOST'); // localhost
echo $_SERVER['DB_PORT']; // 3306
注意:某些 SAPI(如 Apache + mod_php)可能需额外配置才能让 getenv() 生效;用 $_ENV 更稳妥,前提是 variables_order 包含 E(默认通常包含)。
安全与最佳实践
-
.env文件必须加到.gitignore,禁止提交到版本库 - 生产环境建议用系统级环境变量替代
.env(更安全、更快),仅开发/测试阶段用phpdotenv - 加载前可检查文件是否存在,避免报错:
if (file_exists(__DIR__.'/.env')) {
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
}
基本上就这些 —— Composer 只负责“请人来”,真正干活的是 phpdotenv,关键就是装对、载早、用对位置。











