2010-11-14 16 views
6

¿Por qué aparece este error cuando trato de recuperar el nombre de host del usuario remoto?

Message: Undefined index: REMOTE_HOST 

Al leer la documentación, llegué a saber que debe estar habilitada en httpd.conf. Pero no estoy seguro de qué se debe editar en httpd.conf. ¿Alguien puede ayudarme a descifrar la directiva?

Gracias de antemano :)

+0

¿Pegar el código? – cdhowie

+0

pregunta pertenece a serverfault? (aunque hay soluciones de php-side) – mario

+0

¿Está invocando PHP en la línea de comandos? 'REMOTE_HOST' no se establecerá. – meagar

Respuesta

14

Esto no es un error, es un aviso. REMOTE_HOST no está definido en todos los casos. REMOTE_ADDR es. Necesita volver a configurar su servidor web si lo necesita. HostnameLookups On lo hace, pero se desacelera.

alternativa: Que hacer con PHP las operaciones de búsqueda, por lo que puede saltar (para velocidad) cuando no se necesita:

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

Esto causará el mensaje AVISO si $ _SERVER ["REMOTE_HOST"] no está definido. En el entorno de prueba, es aconsejable deshacerse de los avisos también, ya que pueden convertirse en errores más adelante en algunas circunstancias. '$ r = array_key_exists ('REMOTE_HOST', $ _SERVER)? $ _SERVER ['REMOTE_HOST']: gethostbyaddr ($ _ SERVER ['REMOTE_ADDR']); 'es mejor a ese respecto. Y no use comillas dobles a menos que sea necesario, las comillas simples se ejecutan más rápido. – Coder12345

+0

Uno puede usar el coalesce nulo '??' si el soporte CLI es una preocupación. Y no, las comillas simples son "más rápidas" y son un error de fecha: https://nikic.github.io/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html – mario

+0

Lea los comentarios que hay al menos 2 ejemplos allí que señalan que las comillas simples son aún más rápidas - http://www.phpbench.com/ – Coder12345

4

El PHP manual para REMOTE_HOST en $_SERVER dice:

Su servidor web debe configurarse en crear esta variable. Por ejemplo, en Apache, necesitará HostnameLookups On dentro de httpd.conf para que exista.

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

Con el fin de evitar el mensaje se debe utilizar:

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

La mejor manera:

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

Editar httpd.conf en su servidor web, anadir este línea BusnameLookups En al final del archivo, guarde y reinicie su servidor.

2

Me he enfrentado a este problema al utilizar PHPUnit. Así es como me trato:

$_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';