У меня 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 (апачское предварительное ветвление RHEL)
Массив $ _ ENV
в PHP задается из переменных среды в процессе Apache, которые копируются из среды процесса, запускающего демон Apache. Итак, когда это сработало, это произошло потому, что $ HOSTNAME
было экспортировано из среды в процессе, запустившем Apache, а когда это не сработало, это потому, что $ HOSTNAME
не был экспортирован из в этой среде.
У меня нет удобной машины RHEL, чтобы проверить, где это нужно добавить, но в любом скрипте, запускающем Apache (при условии, что sh / bash), вам нужно либо экспортировать внутреннюю переменную Bash HOSTNAME:
export HOSTNAME
Добавьте эту строку перед фактической инициализацией Apache, и это будет гарантировать, что переменная отображается, если PHP имеет $ _ ENV ['HOSTNAME']
. Или, если по какой-то причине HOSTNAME не установлен вашей оболочкой по умолчанию:
export HOSTNAME=$(hostname -s)