我有 3 台 LAMP 服务器。今天我在 PHP 错误日志中注意到了许多以下内容:
[2010 年 2 月 11 日 10:58:03] PHP 通知:未定义索引:HOSTNAME 在...
当然,当我在 PHP 中执行此操作时,就会发生这种情况:
回显 $_ENV['HOSTNAME'];
当我hostname
从命令行运行时,我得到了正确的(预期的)主机名,同样当我这样做时
php -r'echo $_ENV["HOSTNAME"];'
我也得到了正确的(预期的)主机名。因此,我认为这是我的 Apache 配置问题,而不是 PHP 配置问题(这就是我在 ServerFault 而不是 StackOverflow 上发帖的原因)...
有什么想法吗?服务器正在运行 RHEL。
答案1
$_ENV 超全局变量包含环境变量,但 Apache 提供的是 $_SERVER 数组。从手动的
这些变量从 PHP 解析器运行的环境导入到 PHP 的全局命名空间中。许多变量由运行 PHP 的 shell 提供,并且不同的系统可能运行不同类型的 shell,因此无法列出确切的列表。请参阅 shell 的文档以获取已定义的环境变量列表。
这应该可以工作:
echo php_uname('n');
或 PHP 5.3
echo gethostname();
我无法$_ENV['HOSTNAME']
从 apache 调用的 PHP 脚本(apache prefork RHEL)中获取
答案2
PHP 中的数组$_ENV
是从 Apache 进程中的环境变量设置的,这些变量是从启动 Apache 守护进程的进程的环境中复制而来的。因此,当它工作正常时,是因为从$HOSTNAME
启动 Apache 的进程中的环境中导出了它;当它不工作时,是因为$HOSTNAME
没有从该环境中导出它。
我手边没有 RHEL 机器来检查应该在哪里添加它,但无论在什么脚本启动 Apache(假设是 sh/bash)中,您都需要导出内部 Bash 变量 HOSTNAME:
export HOSTNAME
在实际的 Apache 初始化之前添加该行,它将确保变量显示到 PHP has $_ENV['HOSTNAME']
。或者,如果由于某种原因,您的 shell 默认未设置 HOSTNAME:
export HOSTNAME=$(hostname -s)