Created
December 14, 2013 20:11
-
-
Save alemohamad/7964302 to your computer and use it in GitHub Desktop.
Get Geo-IP Information
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { | |
$ip = $_SERVER['HTTP_CLIENT_IP']; | |
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { | |
$ip = $_SERVER['HTTP_X_FORWARDED_FOR']; | |
} else { | |
$ip = $_SERVER['REMOTE_ADDR']; | |
} | |
print_r(geoCheckIP($ip)); | |
//Array ( [domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen ) | |
//Get an array with geoip-infodata | |
function geoCheckIP($ip) | |
{ | |
//check, if the provided ip is valid | |
if (!filter_var($ip, FILTER_VALIDATE_IP)) { | |
throw new InvalidArgumentException("IP is not valid"); | |
} | |
//contact ip-server | |
$response = @file_get_contents('http://www.netip.de/search?query=' . $ip); | |
if (empty($response)) { | |
throw new InvalidArgumentException("Error contacting Geo-IP-Server"); | |
} | |
//Array containing all regex-patterns necessary to extract ip-geoinfo from page | |
$patterns = array(); | |
$patterns["domain"] = '#Name: (.*?) #i'; | |
$patterns["country"] = '#Country: (.*?) #i'; | |
$patterns["state"] = '#State/Region: (.*?)<br#i'; | |
$patterns["town"] = '#City: (.*?)<br#i'; | |
//Array where results will be stored | |
$ipInfo = array(); | |
//check response from ipserver for above patterns | |
foreach ($patterns as $key => $pattern) { | |
//store the result in array | |
$ipInfo[$key] = preg_match($pattern, $response, $value) && !empty($value[1]) ? $value[1] : 'not found'; | |
} | |
return $ipInfo; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment