消息:未定义的索引:$ _SERVER中的REMOTE_HOST

时间:2010-11-14 18:03:48

标签: php

当我尝试检索远程用户的主机名时,为什么会出现此错误?

Message: Undefined index: REMOTE_HOST

阅读文档时,我发现需要在httpd.conf中启用它。但我不确定需要在httpd.conf中编辑什么。

5 个答案:

答案 0 :(得分:16)

这不是错误,而是通知。在所有情况下都没有定义REMOTE_HOST。 REMOTE_ADDR是。如果需要,您需要重新配置您的网络服务器。 HostnameLookups On做到了,但它会导致经济放缓。

替代方案:让PHP进行查找,以便在不需要时跳过它(速度):

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

答案 1 :(得分:5)

REMOTE_HOST$_SERVER的{​​{3}}说:

  

您的网络服务器必须配置为   创建这个变量。例如在   Apache你需要HostnameLookups On   在httpd.conf里面,它存在。

答案 2 :(得分:3)

$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"]);

答案 3 :(得分:2)

使用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';

答案 4 :(得分:0)

在您的网络服务器中编辑httpd.conf,在文件末尾添加 HostnameLookups On ,保存并重新启动服务器。