PHP使用Dotenv读取.env数据库配置出现Undefined array key报错如何解决
解决方案
- 路径修正:你当前加载.env的路径拼接缺少目录分隔符,导致Dotenv无法找到.env文件,变量自然无法加载。将Dotenv实例创建代码修改为:
同时确认.env文件存放在项目根目录(和vendor目录同级,即从config.php所在的$dotenv = \Dotenv\Dotenv::createImmutable(__DIR__ . '/../../../');includes/database/目录向上跳3级的位置)。 - 变量名一致性校验:你贴出的代码中读取的是
$_ENV["NAME"],但报错提示缺失的是USERNAME键,有两种可能性:- 你
.env文件中定义的变量名和代码中调用的变量名不匹配,注意变量名大小写完全敏感,比如.env写USERNAME=xxx就要用$_ENV['USERNAME']读取,写NAME=xxx就要用$_ENV['NAME']读取 - 你项目其他位置的代码调用了不存在的
$_ENV['USERNAME'],全局搜索对应键名排查即可
- 你
- 变量存在性校验:加载完.env后增加强制校验代码,提前定位缺失变量:
若Dotenv找不到对应变量会直接抛出明确的异常,比PHP原生的数组键不存在提示更容易排查。$dotenv->load(); // 新增校验行 $dotenv->required(['LOCALHOST', 'NAME', 'PASSWORD', 'DATABASE']); - 权限检查:确认.env文件的读取权限对web运行用户(如www-data、apache、nginx)开放,权限不足也会导致Dotenv读取不到文件内容。
- 超全局兼容:部分PHP配置默认关闭了
$_ENV超全局变量,你可以尝试用$_SERVER读取变量,或者修改php.ini配置开启variables_order = "EGPCS"。
内容的提问来源于stack exchange,提问作者ΝΙΚΟΛΑΟΣ ΚΟΥΚΗΣ
相关产品推荐
相关产品推荐

