A PHP code method used to get geo information from a selected IP using the freegeoip.net service, up to 10,000 queries an hour.
MIT Licensed
<?php
/*
* -------------------------------------------------------
* getGeoIP.freegeoip.net
* -------------------------------------------------------
* @Version: 1.0.0
* @Author: FireDart
* @Link: http://www.firedartstudios.com/
* @GitHub: https://github.com/FireDart/snippets/PHP/GeoIP/
* @License: The MIT License (MIT)
*
* Used to get geo information from a selected ip using the
* freegeoip.net service, up to 10,000 queries an hour.
*
* -------------------------------------------------------
* Requirements
* -------------------------------------------------------
* PHP 5.3.0+
*
* -------------------------------------------------------
* Usage
* -------------------------------------------------------
* Basic / Detect IP
* getGeoIP();
*
* Input IP to check
* getGeoIP("aaa.bbb.ccc.ddd", false);
*
*/
/*
* getGeoIP
*
* Returns GEO info about an IP address from
* FreeGeoIP.net, allows 10,000 queries per hour.
*
* @param str $ip IP to check leave blank to get REMOTE_ADDR
* @param boolean $jsonArray Return JSON as array?
* @return (obj|booealn) If info can be return use obj, otherwise report false.
*/
function getGeoIP($ip = null, $jsonArray = false) {
try {
// If no IP is provided use the current users IP
if($ip == null) {
$ip = filter_input(INPUT_SERVER, 'REMOTE_ADDR');
}
// If the IP is equal to 127.0.0.1 (IPv4) or ::1 (IPv6) then cancel, won't work on localhost
if($ip == "127.0.0.1" || $ip == "::1") {
throw new Exception('You are on a local sever, this script won\'t work right.');
}
// Make sure IP provided is valid
if(!filter_var($ip, FILTER_VALIDATE_IP)) {
throw new Exception('Invalid IP address "' . $ip . '".');
}
if(!is_bool($jsonArray)) {
throw new Exception('The second parameter must be a boolean - true (return array) or false (return JSON object); default is false.');
}
// Fetch JSON data with the IP provided
$url = "http://freegeoip.net/json/" . $ip;
// Return the contents, supress errors because we will check in a bit
$json = @file_get_contents($url);
// Did we manage to get data?
if($json === false) {
return false;
}
// Decode JSON
$json = json_decode($json, $jsonArray);
// If an error happens we can assume the JSON is bad or invalid IP
if($json === null) {
// Return false
return false;
} else {
// Otherwise return JSON data
return $json;
}
} catch(Exception $e) {
return $e->getMessage();
}
}







