1

HOMEPATH我正在尝试从 apache读取操作系统变量,但getenv()在浏览器中不起作用,但在命令行中起作用。

我已经阅读了几篇文章,他们说这是一个权限问题。但是有没有办法在 apache 启动时将操作系统变量传播为 apache env 变量?

4

1 回答 1

0

我假设你在 linux 上,如果你不是,我只是在这里发布记录(我的搜索没有结果,我在 CentOS 6.5 上)

据我了解,无法为 apache 提供对环境变量的任何直接访问,包括启动 apache 进程的用户环境中的变量以及您在 /etc/profile.d 启动脚本中指定的全局环境变量。

由于我使用的是 bash,因此我有一个 variables.bashrc 文件,该文件来自我的 ~/.bashrc。这个 variables.bashrc 声明了我的用户环境变量。在我的 apache 启动脚本(/etc/init.d/httpd)中,我添加了一行

. /path/to/variables.bashrc

该来源与我的用户可以访问的变量相同。这使得这些环境变量可用于 apache。

Apache 可能会接收变量,但它也可以阻止变量,除非您明确表示将它们传递给您的脚本。这使用mod_env所以你必须确保这个模块被加载所以你必须添加

PassEnv VARIABLE_NAME

到您正在配置的目录/虚拟主机。例如...

<Directory "/path/to/cgi/scripts/">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
   PassEnv VARIABLE_NAME
</Directory>

这将使它可用于您的 CGI 脚本,或任何可能试图访问环境变量的脚本。

我不确定这是否是解决这个问题的最优雅的方法,所以我很想看看其他人为解决这个问题做了什么......也许是一些自动化的方式(mod_something)来使这些变量可见。

谢谢。

于 2014-05-21T19:43:44.223 回答