Récupérer des informations géographiques à partir de l'IP d'un utilisateur en PHP

L'extension PECL GeoIP permet d'exploiter les données géographiques fournies par l'adresse IP ou le hostname d'un utilisateur. Voici comment l'installer.

Si vous désirez récupérer des informations géographiques à partir de l'adresse IP (ou du hostname) d'un utilisateur, vous pouvez utiliser les fonctions PHP fournies par l'extension PECL GeoIP. Voici comment l'installer sous Ubuntu.

La procédure d'installation sur une Ubuntu 8.04 se résume ainsi :

 $ sudo -s
# apt-get install build-essential php5-dev php5-cli libgeoip-dev libgeoip1 php-pear
# pecl install geoip


Si tout s'est bien passé :

 # echo "extension=geoip.so" >> /etc/php5/cli/php.ini


Si vous utilisez Apache comme serveur :

 # echo "extension=geoip.so" >> /etc/php5/apache2/php.ini


Il faut également installer la base GeoIPCity de Maxmind :

 # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gunzip GeoLiteCity.dat.gz
# mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat


Vous pouvez maintenant tester l'extension avec une ligne du genre[1] :

 $ echo "<?php var_dump(geoip_record_by_name('209.202.168.**'));"|php


Ça donne ici :

 array(11) { ["continent_code"]=>
 string(2) "NA"
 ["country_code"]=>
 string(2) "US"
 ["country_code3"]=>
 string(3) "USA"
 ["country_name"]=>
 string(13) "United States"
 ["region"]=>
 string(2) "NC"
 ["city"]=>
 string(4) "Cary"
 ["postal_code"]=>
 string(5) "27511"
 ["latitude"]=>
 float(35.7********)
 ["longitude"]=>
 float(-78.7*******)
 ["dma_code"]=>
 int(560)
 ["area_code"]=>
 int(919)
}

[1] J'ai volontairement masqué certaines informations pour d'évidentes raisons de confidentialité.

Article publié sous licence Creative Commons BY-NC-SA par Nicolas Perriault