我在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
有问题有人对此提出建议吗? 感谢
答案 0 :(得分:1)
我最终选择了一些选项
如果docker容器需要运行多个服务,则将env vars设置为/ etc / environment将使它们可供所有用户使用。我将以下行添加到我的Dockerfile CMD
CMD ["env | grep _ >> /etc/environment"]
如果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"));
享受它。