我有 3 台 LAMP 服务器。今天我在 PHP 错误日志中注意到以下许多内容:
[11-Feb-2010 10:58:03] PHP 注意:未定义的索引:HOSTNAME 在...
当然,当我这样做时,这发生在 PHP 中:
回声 $_ENV['HOSTNAME'];
当我从命令行运行hostname
时,我得到正确的(预期的)主机名,当我这样做时
php -r 'echo $_ENV["HOSTNAME"];'
我也得到了正确的(预期的)主机名。因此,我认为这是我的 Apache 配置而不是 PHP 中的问题(这就是我在 ServerFault 而不是 StackOverflow 上发布的原因)...
有任何想法吗?服务器正在运行 RHEL。
$_ENV 超全局变量包含环境变量,但 Apache 提供了 $_SERVER 数组。从手册
这应该起作用:
或 PHP 5.3
我无法
$_ENV['HOSTNAME']
从 apache 调用的 PHP 脚本(apache prefork RHEL)中获取http://php.net/manual/en/function.gethostname.php
PHP 中的
$_ENV
数组是从 Apache 进程中的环境变量设置的,这些变量是从启动 Apache 守护程序的进程的环境中复制的。所以当它工作时,是因为$HOSTNAME
在启动Apache的过程中从环境中导出,而当它没有工作时,是因为$HOSTNAME
没有从那个环境中导出。我没有方便的 RHEL 机器来检查应该在哪里添加它,但是在任何启动 Apache 的脚本中(假设是 sh/bash),您都需要导出内部 Bash 变量 HOSTNAME:
在实际的 Apache 初始化之前添加该行,它将确保变量显示为 PHP 具有
$_ENV['HOSTNAME']
. 或者,如果由于某种原因,您的 shell 默认未设置 HOSTNAME: