无法在php中访问环境变量

时间:2014-01-22 02:51:12

标签: php apache centos environment-variables docker

我在php中访问OS环境变量时遇到问题 我在centos 6.3图像上安装了apache / php

在httpd.conf mod mod_env.so中加载 在php.ini中我设置了variables_order =“EGPCS” 重启httpd(很多次)

如果我输入“env”,我会在shell中

DB_PORT_28017_TCP_PROTO=tcp 
HOSTNAME=c6188a8bd77f
DB_NAME=/rockmongo/db
DB_PORT_27017_TCP=tcp://172.17.0.36:27017
TERM=xterm
DB_PORT_28017_TCP_PORT=28017
DB_PORT=tcp://172.17.0.36:27017
DB_PORT_27017_TCP_PORT=27017
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/etc/php.d
DB_PORT_27017_TCP_PROTO=tcp
DB_PORT_28017_TCP_ADDR=172.17.0.36
DB_PORT_28017_TCP=tcp://172.17.0.36:28017
SHLVL=1
HOME=/
DB_PORT_27017_TCP_ADDR=172.17.0.36
container=lxc
_=/usr/bin/env
OLDPWD=/etc

后面有变量im,但是如果我在php中执行print_r($_ENV);我得

Array ( [TERM] => xterm [PATH] => /sbin:/usr/sbin:/bin:/usr/bin [PWD] => / [LANG] => C [SHLVL] => 2 [_] => /usr/sbin/httpd ) 

还看了$ _SERVER& $ GLOBALS。

有趣的是,如果我在shell中执行php -i,我会在_ENV中看到env变量设置正确

我应该注意我在一个docker容器中运行它,但我不相信这是一个问题,因为变量在#env& #php -i。我想我的httpd / php config

有问题

有人对此提出建议吗? 感谢

3 个答案:

答案 0 :(得分:1)

我最终选择了一些选项

  1. 如果docker容器需要运行多个服务,则将env vars设置为/ etc / environment将使它们可供所有用户使用。我将以下行添加到我的Dockerfile CMD

    CMD ["env | grep _ >> /etc/environment"]

  2. 如果docker容器运行单个服务,最好将入口点设置为所需的应用程序,env vars将自动传递给应用程序用户。这是我的Dockerfile CDM& ENTRYPOINT运行apache

    ENTRYPOINT ["/usr/sbin/httpd"] CMD ["-D", "FOREGROUND"]

答案 1 :(得分:0)

大巴是对的。

除非您以Web服务器用户身份登录(apache?),否则您可能看不到相同的环境变量。您可以使用phpinfo测试文件轻松查看它们:

<?php
phpinfo();
?>

或者您可以使用.htaccess文件设置自己的文件:

SetEnv HTTP_MY_VARIABLE "my value";

来自dwitz:您还可以使用以下方法使系统范围内的环境变量可用:

env | grep _ >> /etc/environment

抱歉还不能评论......所以不得不创建一个答案。

答案 2 :(得分:0)

最近我写了一个库来从环境变量中获取值并解析为PHP数据类型。该库可用于将环境变量解析为PHP数据类型(如转换为整数,浮点数,空值,布尔值),使用社区的贡献解析复杂的数据结构,如JSON字符串等。

图书馆可在此处找到:https://github.com/jpcercal/environment

正如您所说,环境已经加载。然后,从环境变量(独立于环境CLI,Apache,Nginx,PHP内置服务器等)获取值来执行此操作:

<?php
// ...
require "vendor/autoload.php";
// ...
var_dump(Cekurte\Environment\Environment::get("YOUR_ENV_VARIABLE_NAME"));

享受它。