$ _ 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.

0
задан 11 February 2010 в 18:24
2 ответа

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

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

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

echo php_uname('n'); 

Или PHP 5.3

echo gethostname(); 

Я не могу добраться $_ENV['HOSTNAME'] из апачского вызванного Сценария PHP (апачское предварительное ветвление RHEL)

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

3
ответ дан 4 December 2019 в 13:10

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

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

export HOSTNAME

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

export HOSTNAME=$(hostname -s)
0
ответ дан 4 December 2019 в 13:10

Теги

Похожие вопросы