2012-03-21 20 views
0

我试图从IP地址获取国家/地区。 问题是用户IP在某些计算机上不显示。一些测试它的用户获得IP但其他人不会(在同一个WiFi网络上)。无法为使用PHP的用户获取正确的IP地址

这是我的代码。哪里不对?

function VisitorIP() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

$ip_address = VisitorIP(); 

$geodata = file_get_contents('http://api.ipinfodb.com/v3/ip-country/?key=0000&ip=' . $ip_address . '&format=json'); 

$decoded = json_decode($geodata); 

$country = strtolower($decoded->countryCode); 
+1

总是可以看看phpBB。尽管有各种各样的条件(包括代理),但他们有一个非常完整的方法来获取用户的IP。 – 2012-03-21 13:59:48

+0

'var_dump($ ip_address)'给不给你一个访问者。那里有什么? – Jon 2012-03-21 14:00:25

+2

访客*必须*拥有IP地址,否则他们无法收到回复。您还应该专门使用'$ _SERVER ['REMOTE_ADDR']',所有其他值都不可确定,可能是假的。 – deceze 2012-03-21 14:04:57

回答

0

怎么了?

一切。

可用于服务器的唯一IP是存储在$ _SERVER ['REMOTE_ADDR']变量中的一个IP。
所以,你必须使用这一个,而不是各种不明来源的HTTP头。

+0

我需要访问我的网站而不是服务器IP的用户的IP地址。 – 2012-03-21 15:13:07

+1

如果您没有注意到,它被命名为** REMOTE ** ADDR。 – 2012-03-21 15:19:32

+0

好的,抱歉。但是$ _SERVER ['REMOTE_ADDR']在许多情况下不提供可用的IP。 – 2012-03-22 08:14:18