2010-11-14 3 views
6

Pourquoi j'obtiens cette erreur lorsque j'essaie de récupérer le nom d'hôte de l'utilisateur distant?

Message: Undefined index: REMOTE_HOST 

Lors de la lecture de la documentation, j'ai appris qu'elle devait être activée dans httpd.conf. Mais je ne suis pas sûr de ce qui doit être édité dans httpd.conf. Quelqu'un peut-il m'aider à trouver la directive?

Merci à l'avance :)

+0

Coller votre code? – cdhowie

+0

question appartient à serverfault? (bien qu'il existe des solutions de contournement php-side) – mario

+0

Appelez-vous PHP sur la ligne de commande? 'REMOTE_HOST' ne sera pas défini. – meagar

Répondre

14

Ce n'est pas une erreur, il est un avis. REMOTE_HOST n'est pas défini dans tous les cas. REMOTE_ADDR est. Vous devez reconfigurer votre serveur web si vous en avez besoin. HostnameLookups On le fait, mais il subit un ralentissement.

Alternative: Laissez PHP faire la recherche, vous pouvez sauter (pour la vitesse) lorsqu'ils ne sont pas nécessaires:

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

Cela provoquera un message NOTICE si $ _SERVER ["REMOTE_HOST"] n'est pas défini. Dans un environnement de test, il est conseillé de se débarrasser des notifications, car elles peuvent facilement devenir des erreurs plus tard dans certaines circonstances. '$ r = array_key_exists ('REMOTE_HOST', $ _SERVER)? $ _SERVER ['REMOTE_HOST']: gethostbyaddr ($ _ SERVER ['REMOTE_ADDR']); 'est meilleur à cet égard. Et n'utilisez pas de guillemets, sauf si vous devez, les guillemets simples s'exécuter plus rapidement. – Coder12345

+0

On peut utiliser la coalesce nulle '??' si le support CLI est un problème. Et non, les guillemets simples étant "plus rapides" est une idée fausse datée: https://nikic.github.io/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html – mario

+0

Lire les commentaires il y a au moins 2 exemples là qui pointent que les guillemets simples est encore plus rapide - http://www.phpbench.com/ – Coder12345

4

Le PHP manual pour REMOTE_HOST en $_SERVER dit:

Votre serveur web doit être configuré pour créer cette variable. Par exemple, dans Apache, vous devez avoir HostnameLookups sur dans httpd.conf pour qu'il existe.

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

Afin d'éviter le message il faut utiliser:

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

La meilleure façon:

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

Modifier httpd.conf dans votre serveur web, ajoutez ligne HostnameLookups On à la fin du fichier, enregistrez et redémarrez votre serveur.

2

J'ai rencontré ce problème lors de l'utilisation de PHPUnit. Voici comment je fais face à:

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