我有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']
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)