2014-02-19 111 views
5

我有国家的IP范围。我检查这个范围内的用户IP地址是否正确,然后他能够看到该网站,否则他不会。 我使用下面的代码,如何在PHP中使用IP地址查找国家?

$ip = $_SERVER['REMOTE_ADDR']; 
    if(ip2long($ip) >= $ipstart && ip2long($ip) <= $ipend){ 
     return true; 
    } 

我的问题是,如果有人来自不同的国家想与ABC他的笔记本电脑/笔记本电脑到另一国假设XYZ那么将上面的代码工作?在同一台笔记本电脑上。

对于ipv4和ipv6,上述场景如何可能?

[编辑]

哪个IP地址$_SERVER['REMOTE_ADDR']取,不会是本机的IP或IP连接,这样我们就可以知道他现在在这个国家?

谢谢

+0

您将需要一个第三方的API IP国表从查找 –

+0

使用此 $ countryName = geoip_country_name_by_name($ _ SERVER ['REMOTE_ADDR']); PHP建立寻找国名的方法 – Haris

+0

[IPLocate.io](https://www.iplocate.io)提供了一个免费的API:https://www.iplocate.io/api/lookup/8.8.8.8 - 例子在PHP:'$ result = json_decode(file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8')); echo $ result-> country;' - 免责声明:我运行此服务。 – ttarik

回答

1

Php没有这个功能。你应该建立一个数据库或者只是使用一个外部API来发现。

http://ip-api.com 这是一个很好的/免费的。 只是从那个解析响应。

6

使用这个API http://ipinfo.io

function ip_details($IPaddress) 
    { 
     $json  = file_get_contents("http://ipinfo.io/{$IPaddress}"); 
     $details = json_decode($json); 
     return $details; 
    } 

    $IPaddress = $_SERVER['REMOTE_ADDR']; 

    $details = ip_details("$IPaddress"); 

    //echo $details->city; #Tamilnadu 
    //echo $details->country; 
    //echo $details->org;  
    //echo $details->hostname; 
1

看到这个link

您可以使用此功能找到IP国名,

function getLocationInfoByIp($ip_addr) 
{ 
    $return_data = array('country'=>'', 'city'=>''); 
    $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip_addr)); 
    if($ip_data && $ip_data->geoplugin_countryName != null) 
    { 
     $return_data['country'] = $ip_data->geoplugin_countryCode; 
     $return_data['city'] = $ip_data->geoplugin_city; 
    } 
    return $return_data; 
} 

通IP地址在此功能,你将获得国家信息...

对于IP地址,你可以用下面的地址作为IP地址中的一个,

$client_ip = @$_SERVER['HTTP_CLIENT_IP']; 
$forward_ip = @$_SERVER['HTTP_X_FORWARDED_FOR']; 
$remote_ip = @$_SERVER['REMOTE_ADDR']; 

希望这将帮助你...

+0

感谢您的回复,我有一个问题,哪个IP地址$ _SERVER ['REMOTE_ADDR']提取机器IP或连接IP? – Sachin

+0

你可以在链接中看到我在我的答案中附加了... –

+0

我已经使用了上面的例子,当看到不同设备中的不同结果时我感到震惊,只有'$ _SERVER ['REMOTE_ADDR'];'给出结果。对于我的台式电脑,它给国** IN **,在我的移动与沃达丰SIM卡它给** **和使用Uninor SIM卡给我**美国** – Sachin