当我尝试检索远程用户的主机名时,为什么会出现此错误?
Message: Undefined index: REMOTE_HOST
阅读文档时,我发现需要在httpd.conf中启用它。但我不确定需要在httpd.conf中编辑什么。
答案 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 ,保存并重新启动服务器。