6
votes

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

3
You will need a 3rd party API for IP country tables to look up fromJake N
use this $countryName = geoip_country_name_by_name($_SERVER['REMOTE_ADDR']); PHP built method for finding country nameHaris
IPLocate.io provides a free API: iplocate.io/api/lookup/8.8.8.8 - Example in PHP: $result = json_decode(file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8')); echo $result->country; - Disclaimer: I run this service.ttarik

3 Answers

6
votes

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; 
1
votes

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.

1
votes

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