$ _ENV 没有被设置,Apache的潜在问题?

我有3个LAMP服务器。 今天我在PHP错误日志中注意到了很多:

 [11-Feb-2010 10:58:03] PHP注意:未定义的索引:HOSTNAME在...

当然,这是发生在PHP中,当我这样做:

 echo $ _ENV ['HOSTNAME'];

当我从命令行运行hostname名时,我也会得到正确的(预期的)主机名

 php -r'echo $ _ENV [“HOSTNAME”];'

我也得到适当的(预期的)主机名。 因此,我认为这是在我的Apacheconfiguration问题,而不是PHP(这就是为什么我发布在ServerFault而不是StackOverflow)…

有任何想法吗? 服务器正在运行RHEL。

$ _ENV superglobal包含环境variables,但Apache提供了$ _SERVER数组。 从手册

这些variables从运行PHPparsing器的环境中导入到PHP的全局名称空间中。 许多由PHP运行的shell提供,不同的系统可能运行不同types的shell,一个明确的列表是不可能的。 请参阅您的shell的文档以获取定义的环境variables的列表。

这应该工作,而不是:

 echo php_uname('n'); 

或PHP 5.3

 echo gethostname(); 

我无法从apache调用的PHP脚本(apache prefork RHEL)中获取$_ENV['HOSTNAME']

http://php.net/manual/en/function.gethostname.php

PHP中的$_ENV数组是从Apache进程中的环境variables中设置的,这些环境variables是从启动Apache守护进程的进程的环境中复制的。 所以当它起作用的时候,是因为$HOSTNAME是从启动Apache的进程中的环境中导出的,当它没有工作时,这是因为$HOSTNAME没有从那个环境中导出。

我没有一个RHEL机器来检查这个应该添加的地方,但是在任何启动Apache的脚本(假设为sh / bash)中,您都需要导出内部BashvariablesHOSTNAME:

 export HOSTNAME 

在实际的Apache初始化之前添加该行,它将确保PHP显示的variables具有$_ENV['HOSTNAME'] 。 或者,如果由于某种原因默认情况下HOSTNAME没有被shell设置:

 export HOSTNAME=$(hostname -s)