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