2016-12-26 102 views
2

我正在使用亚马逊网络服务在Linux EC2实例在哪里设置实例-id作为一个环境变量通过执行检索在PHP的环境变量

export EC2_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) 

当我尝试检索从数据使用PHP变量$_ENV['EC2_INSTANCE_ID']getenv("EC2_INSTANCE_ID")我得到一个错误:

Undefined index: EC2_INSTANCE_ID

(这个错误来自$ _ENV [ '...'],GETENV()根本没有返回变量的值。)

我已经通过设置variables_order = "EGPCS"在php.ini中设置了环境变量。

当我在命令行运行printenv时,我得到EC2_INSTANCE_ID=i-039.....

我在设置环境变量后,通过使用service httpd restart重新启动apache。

那么,为什么PHP不提取变量?

回答

3

如果在shell中执行 export VARNAME = value ,就像您在问题中提出的建议那样,运行在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