Сообщение: Неопределенный индекс: REMOTE_HOST в $ _SERVER

Почему я получаю эту ошибку, когда пытаюсь получить имя хоста удаленного пользователя?

Message: Undefined index: REMOTE_HOST 

При чтении документации я узнал, что ее нужно включить в httpd.conf. Но я не уверен, что нужно редактировать в httpd.conf. Может ли кто-нибудь помочь мне разобраться с директивой?

Заранее спасибо 🙂

Это не ошибка, это уведомление. REMOTE_HOST не определяется во всех случаях. REMOTE_ADDR есть. Вам нужно перенастроить ваш веб-сервер, если вам это нужно. HostnameLookups On делает это, но это приводит к замедлению.

Альтернатива: пусть PHP выполняет поиск, поэтому вы можете пропустить его (для скорости), когда это не нужно:

 $r = $_SERVER["REMOTE_HOST"] ?: gethostbyaddr($_SERVER["REMOTE_ADDR"]); 

Руководство PHP для REMOTE_HOST в $_SERVER говорит:

Ваш веб-сервер должен быть настроен для создания этой переменной. Например, в Apache вам понадобятся HostnameLookups. Внутри httpd.conf для его существования.

 $r = $_SERVER["REMOTE_HOST"] ?: gethostbyaddr($_SERVER["REMOTE_ADDR"]); // Will still cause the error/notice message 

Чтобы избежать сообщения, следует использовать:

 $r = array_key_exists( 'REMOTE_HOST', $_SERVER) ? $_SERVER['REMOTE_HOST'] : gethostbyaddr($_SERVER["REMOTE_ADDR"]); 

Я столкнулся с этой проблемой при использовании PHPUnit. Вот как я занимаюсь:

  $_SERVER["REMOTE_ADDR"] = array_key_exists( 'REMOTE_ADDR', $_SERVER) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; $_SERVER["REMOTE_HOST"] = array_key_exists( 'REMOTE_HOST', $_SERVER) ? $_SERVER['REMOTE_HOST'] : gethostbyaddr($_SERVER["REMOTE_ADDR"]); $_SERVER["SERVER_PROTOCOL"] = array_key_exists( 'SERVER_PROTOCOL', $_SERVER) ? $_SERVER['SERVER_PROTOCOL'] : "HTTP/1.1"; $_SERVER["REQUEST_METHOD"] = array_key_exists( 'REQUEST_METHOD', $_SERVER) ? $_SERVER['REQUEST_METHOD'] : "GET"; $_SERVER["SERVER_PORT"] = array_key_exists( 'SERVER_PORT', $_SERVER) ? $_SERVER['SERVER_PORT'] : "80"; $_SERVER["SERVER_SOFTWARE"] = array_key_exists( 'SERVER_SOFTWARE', $_SERVER) ? $_SERVER['SERVER_SOFTWARE'] : "Apache"; $_SERVER["HTTP_ACCEPT"] = array_key_exists( 'HTTP_ACCEPT', $_SERVER) ? $_SERVER['HTTP_ACCEPT'] : "text/html,application/xhtml+xml,application/xml,application/json"; $_SERVER["HTTP_HOST"] = array_key_exists( 'HTTP_HOST', $_SERVER) ? $_SERVER['HTTP_HOST'] : "www.site.com"; $_SERVER["HTTP_USER_AGENT"] = array_key_exists( 'HTTP_USER_AGENT', $_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36'; 

Измените httpd.conf на своем веб-сервере, добавьте эту строку. HostnameLookups. В конце файла сохраните и перезапустите сервер.

Лучший путь:

 $isp = isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : gethostbyaddr($datosVista['ip']);