Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Geo Location based on IP Address - PHP [closed]

Tags:

We're looking for a fast and accurate way to get the visitors location based on their IP.

We have tried ipinfodb.com but their API made our website severely lag when making the API call.

What other services do you suggest?

like image 946
Latox Avatar asked Oct 14 '11 11:10

Latox


1 Answers

Get Geo-IP Information

Requests a geo-IP-server (netip.de) to check, returns where an IP is located (host, state, country, town).

<?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();                $patterns["domain"] = '#Domain: (.*?)&nbsp;#i';                $patterns["country"] = '#Country: (.*?)&nbsp;#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;        }  ?> 
like image 90
David Croft Avatar answered Oct 03 '22 15:10

David Croft