Php 无法读取环境变量
我有一个简单的Symfony项目,在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
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
。谢谢你的帮助。如果你写下来作为回答,我会接受的