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