Назад | Перейти на главную страницу

$ _ENV ['HOSTNAME'] не устанавливается. Возможная проблема с Apache?

У меня 3 сервера LAMP. Сегодня я заметил в журнале ошибок PHP много из следующего:

[11-Feb-2010 10:58:03] PHP Notice:  Undefined index:  HOSTNAME in ...

Конечно, это происходит в PHP, когда я делаю следующее:

echo $_ENV['HOSTNAME'];

Когда я бегу hostname из командной строки я получаю правильное (ожидаемое) имя хоста, также когда я

php -r 'echo $_ENV["HOSTNAME"];'

Я также получаю правильное (ожидаемое) имя хоста. Следовательно, я думаю, что это проблема в моей конфигурации Apache, а не в PHP (поэтому я публикую на ServerFault, а не на StackOverflow) ...

Любые идеи? На серверах работает RHEL.

Суперглобальный $ _ENV содержит переменные окружения, но вместо этого Apache представляет массив $ _SERVER. Из руководство

Эти переменные импортируются в глобальное пространство имен PHP из среды, в которой работает синтаксический анализатор PHP. Многие из них предоставляются оболочкой, в которой работает PHP, и в разных системах, вероятно, работают разные виды оболочек, окончательный список невозможен. Пожалуйста, обратитесь к документации вашей оболочки для получения списка определенных переменных среды.

Вместо этого это должно работать:

echo php_uname('n'); 

Или PHP 5.3

echo gethostname(); 

Я не могу получить $_ENV['HOSTNAME'] из PHP-скрипта, вызываемого apache (предварительный форк apache RHEL)

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

В $_ENV В PHP массив устанавливается из переменных среды в процессе Apache, которые копируются из среды процесса, запускающего демон Apache. Итак, когда это сработало, это было потому, что $HOSTNAME был экспортирован из среды в процессе, запустившем Apache, и когда он не работал, это потому, что $HOSTNAME не был экспортирован из этой среды.

У меня нет удобной машины RHEL, чтобы проверить, куда это нужно добавить, но в любом скрипте, запускающем Apache (при условии, что sh / bash), вам нужно либо экспортировать внутреннюю переменную Bash HOSTNAME:

export HOSTNAME

Добавьте эту строку перед фактической инициализацией Apache, и это будет гарантировать, что переменная отображается до того, как PHP имеет $_ENV['HOSTNAME']. Или, если по какой-то причине HOSTNAME не установлен вашей оболочкой по умолчанию:

export HOSTNAME=$(hostname -s)