Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find country using IP address in PHP? [duplicate]

Tags:

php

ip

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

like image 353
Sachin Avatar asked Feb 19 '14 10:02

Sachin


People also ask

Can you identify country by IP address?

You may also use 3rd party websites such as Geobytes or Dnsstuff to lookup the IP address. The whois lookup will reveal name of the ISP who owns that IP address, and the country where it is originated from. If you're lucky, you might also find the city of orgin.

How do I find the geo location of an IP address?

Just send HTTP GET request to https://api.ipgeolocationapi.com with different parameters and get the JSON result. For example, the following HTTP GET request will give you a location of the specified IP address. The following request returns the country information specified by the ISO country code.

How can I get current location from IP address in PHP?

Get Location from IP Address using PHPUse the IP Geolocation API to get the user's location from IP using PHP. Call API via HTTP GET request using cURL in PHP. Convert API JSON response to array using json_decode() function. Retrieve IP data from API response.

How do I match an IP address to a location?

Through a useful internet tool called IP Geolocation Lookup, you can track an IP address close to someone's exact location. You can get pretty close, depending on a variety of factors, to finding the physical location of someone's IP address.


3 Answers

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; 
like image 148
Dimag Kharab Avatar answered Oct 21 '22 18:10

Dimag Kharab


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.

like image 20
cfv1000 Avatar answered Oct 21 '22 18:10

cfv1000


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

like image 42
Akshay Paghdar Avatar answered Oct 21 '22 18:10

Akshay Paghdar