Php 无法读取环境变量

Php 无法读取环境变量,php,symfony,phpdotenv,Php,Symfony,Phpdotenv,我有一个简单的Symfony项目,在composer.json中使用“Symfony/dotenv”:“4.3.*”,,并尝试读取环境变量的值 这是我的命令: var_dump($_ENV['MY_NEW_VAR']); 这是我的.env文件 MY_NEW_VAR=testing 在执行命令时,我得到以下结果 string(7) "testing" 到目前为止一切都很好。。。。但是现在,如果我想使用环境变量覆盖设置,它会返回一个错误。首先,我设置了环境变量 export MY_NEW_VA

我有一个简单的Symfony项目,在
composer.json
中使用
“Symfony/dotenv”:“4.3.*”,
,并尝试读取环境变量的值

这是我的命令:

var_dump($_ENV['MY_NEW_VAR']);
这是我的
.env
文件

MY_NEW_VAR=testing
在执行命令时,我得到以下结果

string(7) "testing"
到目前为止一切都很好。。。。但是现在,如果我想使用环境变量覆盖设置,它会返回一个错误。首先,我设置了环境变量

export MY_NEW_VAR="something_else"
然后再次执行该命令,结果如下

[ErrorException]
Notice: Undefined index: MY_NEW_VAR
如果我使用
unset MY_NEW_VAR
删除环境变量并再次执行该命令,我将从
.env
文件中获取该值

MY_NEW_VAR=testing
我希望环境变量覆盖
.env
设置,如
.env
文件注释中所述

MY_NEW_VAR=testing
#在所有环境中,都会加载以下文件(如果存在):,
#后者优先于前者:
#
#*.env包含应用程序所需的环境变量的默认值
#*.env.local未提交的带有本地覆盖的文件
#*.env.$APP_env提交的环境特定默认值
#*.env.$APP_env.local未提交的环境特定重写
#
#真实环境变量胜过.env文件。

为什么它不适用于环境变量?我遗漏了什么吗?

您问题中的代码是正确的,所以我敢打赌问题出在其他地方

关于
getenv()
$\u ENV
$\u SERVER
的工作方式,存在许多不规则和不一致之处。根据我的经验,我发现
$\u服务器
更可靠,而且很多时候检查两者更安全。例如,如果您检查Symfony 4.3的
config/bootstrap.php
上的代码,您将看到如下内容:

$\u SERVER['APP\u ENV']=$\u ENV['APP\u ENV']=($\u SERVER['APP\u ENV']??$\u ENV['APP\u ENV']]null)?:'dev';
在任何情况下,如果您的
$\u ENV
superglobal最初为空,可能是因为在
变量的顺序上
。检查其值,如果不包括
E
,则将其前置为现有值,并使用该值正确填充

假设
S
相当于
ES

在CGI和FastCGI SAPI中,$\u服务器也由来自环境的值填充;无论E在本指令其他地方的位置如何,S始终等同于ES


但我发现情况并非始终如一。

好吧,这会产生一些奇怪的结果<当仅使用
.env
时,code>getenv()返回
false
,其中as
$\u服务器返回正确的结果。使用环境变量
getenv()
$\u SERVER
返回
something\u other
$\u ENV
返回错误。因此,
$\u SERVER
在所有情况下都有效,
getenv()
仅在设置环境变量时有效,
$\u ENV
仅在使用
.ENV
文件时有效…
变量顺序=>GPCS=>GPCS
-使用自制软件安装php,从未听说过此设置。。。我猜我需要一个E在那里的某个地方?不过谢谢你的指针-要设置一个E然后再试一次…我设置了EGPC并且
$\u ENV
开始工作-
getenv()
在仅使用
.ENV
时仍然返回
false
。谢谢你的帮助。如果你写下来作为回答,我会接受的