All tutorials I have seen have pointed towards functions like geoip_record_by_name
. I always get this error: Fatal error: Call to undefined function geoip
You can try hostip.info, Maxmind or ip2location to name a few. These are easy to use with PHP and can be used on shared hosting. Some of them have offline options as well.
If you have MySQL server, there are IP databases that you can use and install for free, then do a $_SERVER['REMOTE_ADDR']
and run it against the database data.
i.e. (based on some arbitrary db)
<?php
$result = mysql_query("SELECT *
FROM ips
WHERE ip = {$_SERVER['REMOTE_ADDR']}
LIMIT 1") or die(mysql_error());
$row = mysql_fetch_assoc($result);
$city = $row['city'];
$state = $row['state'];
$country = $row['country'];
?>
Some databases(Or just google it): http://www.ipinfodb.com/ip_database.php
EDIT
You can also do JSON/XML requests from other APIs and parse the data:
i.e. (Using ipinfodb.com again)
$doc->loadXML(file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=your_key&ip=" . $_SERVER['REMOTE_ADDR'] . "&timezone=false"));
$country = $doc->getElementsByTagName('CountryName')->item(0)->nodeValue;