samuelhauser
2/17/2014 - 9:07 PM

Get Geo-IP Information

<?php
$ip = '94.219.40.96';
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(
		'domain' => '#Domain: (.*?)&nbsp;#i',
		'country' => '#Country: (.*?)&nbsp;#i',
		'state' => '#State/Region: (.*?)<br#i',
		'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;
}
?>