Ideally I'm trying to put together a PHP script that I can query from any web browser and it returns the country of the IP address that accessed the PHP script.
Is this possible or is there a better solution?
Ideally I'm trying to put together a PHP script that I can query from any web browser and it returns the country of the IP address that accessed the PHP script.
Is this possible or is there a better solution?
You can get country from IP address with this location API
Code
echo file_get_contents('https://ipapi.co/8.8.8.8/country/');
Response
US
Here's a fiddle. Response is text when you query a specific field e.g. country here. No decoding needed, just plug it into your code.
P.S. If you want all the fields e.g. https://ipapi.co/8.8.8.8/json/, the response is JSON.
Install and use PHP's GeoIP extension if you can. On debian lenny:
sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
sudo gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
sudo apt-get install php5-geoip
# or sudo apt-get install php-geoip for PHP7
and then try it in PHP:
$ip = $_SERVER['REMOTE_ADDR'];
$country = geoip_country_name_by_name($ip);
echo 'The current user is located in: ' . $country;
returns:
The current user is located in: Cameroon
You can try the services of https://www.geoip-db.com They provide a JSON or JSONP-callback solution.
<?php
$json = file_get_contents("https://www.geoip-db.com/json");
$data = json_decode($json);
print $data->country_code . "<br>";
print $data->country_name . "<br>";
print $data->state . "<br>";
print $data->city . "<br>";
print $data->postal . "<br>";
print $data->latitude . "<br>";
print $data->longitude . "<br>";
print $data->IPv4 . "<br>";
?>
I run the service at IPLocate.io, which you can hook into for free with one easy call:
<?php
$res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8');
$res = json_decode($res);
echo $res->country; // United States
echo $res->continent; // North America
echo $res->latitude; // 37.751
echo $res->longitude; // -97.822
var_dump($res);
The $res object will contain your geolocation fields like country, city, etc.
Check out the docs for more information.