Hướng dẫn dùng geoip lookup trong PHP

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_record_by_name() in /home/<acct>/public_html/geoip.php on line <line>

I'm on "shared" hosting, meaning I don't have access to install the PECL geoip extension.

What are other (free!) ways to perform geoip lookups? Preferably ones which don't depend on an external service?

asked Jun 27, 2011 at 21:27

9

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;

answered Jun 27, 2011 at 21:31

Steve RobbinsSteve Robbins

13.3k11 gold badges73 silver badges122 bronze badges

2

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.

answered Jun 27, 2011 at 21:29

webbiedavewebbiedave

47.6k8 gold badges87 silver badges100 bronze badges

2

Not the answer you're looking for? Browse other questions tagged php geoip or ask your own question.