How to find country using IP address in PHP? [dupl

2019-02-17 05:28发布

This question already has an answer here:

I have IP ranges of the country. And I am checking the the user IP address within this ranges if true then he is able to see the site otherwise he wont. I have use following code,

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

My question is that if somebody comes from different country suppose ABC with his laptop/notebook to another country suppose XYZ then will above code works? on the same laptop.

How will it be possible for the above scenario for ipv4 and ipv6?

[EDIT]

Which IP address $_SERVER['REMOTE_ADDR'] fetch, will it be the machine IP or the connection IP, so that we can know that he now in this country?

Thanks

标签: php ip
3条回答
我欲成王,谁敢阻挡
2楼-- · 2019-02-17 05:50

use this 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; 
查看更多
在下西门庆
3楼-- · 2019-02-17 06:08

Php doesn't have a function for this. You should either build a database or just use an external api to find that out.

http://ip-api.com Here is a good / free one. Just parse responses from that one.

查看更多
神经病院院长
4楼-- · 2019-02-17 06:13

See this link

you can find country name from ip using this function,

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;
}

Pass IP address in this function and you will get country info...

For ip address, you can use one of following address as ip address,

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

Hope this will help you...

查看更多
登录 后发表回答