$_ENV['HOSTNAME'] 未设置,Apache 是否存在问题?

$_ENV['HOSTNAME'] 未设置,Apache 是否存在问题?

我有 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)中获取

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

答案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)

相关内容