Простой запрос информации о PHP-сервере - вообще не работает

Переходим к моему другому вопросу и его пара.

Я хочу получить значение Hostname:Port, найденное в функции phpinfo(). Кажется, я нигде не могу его найти, и его нет в $_SERVER.


person Josh K    schedule 01.05.2010    source источник


Ответы (2)


Вы можете использовать $_SERVER['SERVER_NAME'] для этого. Вам нужно только настроить сервер таким образом, чтобы он возвращал ожидаемое значение. Очевидно, вы используете более новую версию, чем Apache HTTPD 1.3.

Вам необходимо установить директиву UseCanonicalName на on в записи <VirtualHost> в httpd.conf (также проверьте предупреждение внизу связанного документа!).

<VirtualHost *>
    ServerName example.com
    UseCanonicalName on
</VirtualHost> 

Также см. этот ответ.

person BalusC    schedule 01.05.2010
comment
Хорошо, это работает. Теперь забавная вещь, вместо того, чтобы перейти к /var/www, как это было до того, как я перезапустил Apache, он ищет /htdocs. Я не думаю, что я что-то изменил, но почему он это делает? - person Josh K; 01.05.2010
comment
В основном DocumentRoot изменился, но нигде я не проверял. - person Josh K; 01.05.2010
comment
Повторно объявите DocumentRoot в <VirtualHost>. - person BalusC; 01.05.2010
comment
Ага, понял. На самом деле разместил его на SF. - person Josh K; 01.05.2010

Сервер Apache 2.0 с PHP 5.2 $_SERVER['SERVER_PORT'] должен дать вам 80 для http-соединений.

Для имени хоста для меня эти два работают одинаково:

echo $_SERVER['HTTP_HOST'];
echo $_SERVER['SERVER_NAME'];

... должно сработать.

Подробнее о переменной $_SERVER читайте здесь

person artlung    schedule 01.05.2010
comment
Да, меня больше интересует имя. Собственно, интересует только название. - person Josh K; 01.05.2010
comment
Обновлен ответ с именем хоста. - person artlung; 01.05.2010
comment
Будьте осторожны. - person BalusC; 01.05.2010
comment
Это не в $_SERVER. Вообще. print_r($_SERVER); ничего не показывает, особенно имя хоста, указанное в ячейке phpinfo();. - person Josh K; 01.05.2010
comment
Таким образом.. Вам нужно настроить сервер :) См. ссылку в моем предыдущем комментарии. - person BalusC; 01.05.2010
comment
По какому адресу вы звоните? - person artlung; 01.05.2010
comment
Ах, это был похожий ответ, который я получал в другом месте, я просто не хотел настраивать его для каждого виртуального хоста, и тогда он, вероятно, испортит некоторые другие вещи, которые я делаю. Эх. - person Josh K; 01.05.2010
comment
@artlung: это просто IP-адрес сервера http://111.111.111.111/phptest.php. - person Josh K; 01.05.2010
comment
Итак, для URL: 111.111.111.111/phptest.php -- $_REQUEST имеет отношение к выполняется фактический запрос, и поскольку имя хоста нигде не найдено, IP-адрес (111.111.111.111) соответствует ожидаемому. Поскольку один и тот же веб-сайт может иметь псевдоним и быть доступным несколькими способами, у вас не обязательно будет какой-либо способ получить каноническое имя для сервера. У вас может появиться тот же сайт под localhost 111.111.111.111 example.com example.com example.org — так какой правильный? Все они? - person artlung; 01.05.2010
comment
Одна вещь, которую вы могли бы сделать, это принудительно указать домен, так что, скажем, я хотел, чтобы мой сайт отображался для всех значений в предыдущем комментарии, но я хотел, чтобы это было что-то конкретное stackoverflow.com /questions/1495165/ будет подходом. - person artlung; 01.05.2010