Geo IP Location

add a note add a note

User Contributed Notes 2 notes

up
17
mark at moderndeveloperllc dot com
232 years ago
It should be noted that this extension has now been superseded by the GeoIP2 API that MaxMind now produces. There is a pure-PHP set of classes and a C library and extension you can optionally install. The code can be found in various projects on MaxMind's GitHub page: https://github.com/maxmind/
up
-7
istsehrgut
230 years ago
If you still want to use legacy binaries but also need IPv6 support this should help:

In order to support IPv6->Country code easily and without unnecessary files based on the integration above:

Grab a copy of the latest legacy IPv6 data (I'm assuming you already have IPv4 binary):

wget http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz
Decompress and move it to a dir accessible to your web server:

gunzip GeoIPv6.dat
mv GeoIPv6.dat /etc/usr/share/GeoIP/GeoIPv6.dat
Grab a copy of geoip.inc from the Maxmind git dir (https://github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc) and save it somewhere you can access wherever you'll need to run geoip.

If you have php5-geoip installed as I did, remove it with sudo apt-get remove php5-geoip; purge as necessary.

With the above done you can now test incoming IP address for v4 or v6 and get appropriate results.

Example:

<?php
include_once('geoip.inc');

//set an IPv6 address for testing
$ip='2601:8:be00:cf20:ca60:ff:fe09:35b5';

/*
test if $ip is v4 or v6 and assign appropriate .dat file in $gi
run appropriate function geoip_country_code_by_addr() vs geoip_country_code_by_addr_v6()  
*/
if((strpos($ip, ":") === false)) {
   
//ipv4
   
$gi = geoip_open("/usr/share/GeoIP/GeoIP1.dat",GEOIP_STANDARD);
   
$country = geoip_country_code_by_addr($gi, $ip);
}
else {
   
//ipv6
   
$gi = geoip_open("/usr/share/GeoIP/GeoIPv6.dat",GEOIP_STANDARD);
   
$country = geoip_country_code_by_addr_v6($gi, $ip);
}
echo
$ip . "<br>" . $country;
This is specifically for Country, but can easily be replicated for City data.
To Top