我想在启动时将linux中的环境变量传递给apache。
导出MYVAR = 5 - 我在命令行上定义我的环境变量
PassEnv MYVAR - 设置apache以在apache配置文件中导入变量
apachectl重启 - 当我重新启动apache时,我没有收到错误消息。但是我注意到了 如果我在第一步中没有创建环境变量,我会收到一条警告信息,所以必须在这里工作
echo $ _SERVER ['MYVAR'] - 我尝试在PHP中访问环境变量但未定义
我观察到,如果我尝试PassEnv已经退出的环境变量(我自己没有创建的环境变量),它可以正常工作。 SetEnv指令也可以正常工作。
我真的想将环境变量动态传递给apache而不将其写入文件中。非常感谢。
我正在使用CentOS,PHP5和Apache2。
感谢。
更新 如果我直接使用httpd调用apache启动而不使用apachectl这是一个shell脚本,似乎环境变量被传递。我原以为“导出”会将变量导出到shell脚本中吗?我不是linux大师,所以请原谅我缺乏知识。
答案 0 :(得分:11)
如果要将环境变量传递给apache,则应确保为运行apache的环境定义了所述环境变量。为此,最简单的选择是添加export MYVAR=value
line to envvars(应该位于/ etc / apache2中)或启动apache的脚本(在/etc/init.d中),并将你的PassEnv MYVAR添加到apache配置中所需的位置。
重新启动apache应确保传递MYVAR环境变量。 AFAIK你将无法在apache运行时更改此var的值...
CentOS的一些相关信息:http://php.dzone.com/news/inserting-variable-headers-apa&default=false&zid=159&browser=16&mid=0&refresh=0
答案 1 :(得分:3)
您应该使用超全局$_ENV
:
$_ENV['MYVAR']
http://www.php.net/manual/en/reserved.variables.environment.php
<强>更新强>
根据以下链接,您的变量实际上可能位于$_SERVER
之后。值得检查$_ENV
。
根据http://www.php.net/manual/en/reserved.variables.environment.php#97105
答案 2 :(得分:1)
扩展上面的wimvds答案;您可以在Apache使用SetEnvIf模块运行时更改环境变量。具体来说,是所述模块的SetEnvIf指令。
e.g。
SetEnvIf Request_URI "^.*\/foobar.*$" FOOBAR="something"
如果正则表达式匹配请求URI(在这种情况下,任何包含单词“foobar”的URI),上面的示例将$ FOOBAR环境变量设置为“something”。您可以在主机的配置文件中定义它(通常在/etc/apache2/sites-available/mywebsite.conf或类似的东西中)。