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

2019-02-17 05:48发布

问题:

This question already has an answer here:

  • Getting the location from an IP address 24 answers

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

回答1:

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; 


回答2:

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.



回答3:

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...



标签: php ip