我在Amazon Web Services上使用Linux EC2实例,我通过执行
将instance-id设置为环境变量export EC2_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
当我尝试使用$_ENV['EC2_INSTANCE_ID']
或getenv("EC2_INSTANCE_ID")
从php中的变量检索数据时出现错误:
未定义索引:EC2_INSTANCE_ID
(此错误来自$ _ENV ['...'],getenv()根本不返回变量的值。)
我已经通过设置variables_order = "EGPCS"
。
当我在命令行中运行printenv
时,我得到EC2_INSTANCE_ID=i-039.....
。
在设置环境变量后,我使用service httpd restart
重新启动了apache。
那么为什么php没有获取变量?
答案 0 :(得分:4)
如果你执行 export VARNAME = value 在shell中,正如您在问题中所建议的那样,在Web服务器中运行的PHP程序将无法读取它。 例如,如果您使用Apache,则需要在Apache配置中为该特定虚拟主机设置该变量。例如:
<VirtualHost ser.ver:80>
SetEnv VARNAME value
</VirtualHost>
然后,该服务器上的PHP程序将能够按预期使用getenv()或$ _ENV读取该变量。
您所描述的内容仅在您的PHP程序作为计算机中的客户端程序执行时才有效:
$ export VARNAME=value
$ cat "<?php echo getenv('VARNAME'); ?>" > test.php
$ php test.php