我正在使用亚马逊Web服务上的Linux EC2实例,在其中我通过执行
将实例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不获取变量?
如果执行导出varname =值在Shell中,正如您在问题中所建议的那样,在Web服务器中运行的PHP程序将无法阅读。例如,如果使用Apache,则需要在该特定虚拟主机的Apache配置中设置该变量。类似:
<VirtualHost ser.ver:80>
SetEnv VARNAME value
</VirtualHost>
然后,该服务器上的PHP程序将能够按照您的期望读取该变量。
您所描述的只有在计算机中以客户端程序执行为客户端程序时才有效:
$ export VARNAME=value
$ cat "<?php echo getenv('VARNAME'); ?>" > test.php
$ php test.php