GeoIP est un service de MaxMind destiné à récupérer des informations (pays, ville,…) à partir d’une IP. Il existe 3 manières de bénéficier de ce service (en pure PHP, grâce à une extension pour PHP et une pour Apache).
Celle qui nous intéresse ici est l’extension pour PHP. Il est conseillé sur le site de passer par PECL, malheureusement sous Ubuntu nous avons une erreur de ce type :
checking for geoip files in default path... not found configure: error: Please reinstall the geoip distribution ERROR: `/tmp/pear/temp/geoip/configure' failed
Le plus simple est alors de passer par les dépôts. Si vous êtes sous Mac ou sous une autre distribution de Linux cherchez GeoIP et le nom de votre distribution, en général ce sujet à été largement couvert. Enfin pour les plus courageux, vous pouvez compiler le package.
apt-get install php5-geoip
Par défaut, une base de données est installée sur votre machine dans le répertoire /usr/share/GeoIP
. Pour bénéficier de la localisation par ville (en version lite) et des informations sur l’ASP.
Il vous faut récupérer ces deux archives et les décompresser dans le réperoire /usr/share/GeoIP
:
- GeoLiteCity
- GeoIPASPNum
En ce qui concerne GeoLiteCity.dat renommer ce fichier en GeoIPCity.dat, sinon l’extension GeoIP ne le prendra pas en compte.
Enfin, étant donné que la liste des pays n’est pas à jour, vous pouvez télécharger la base contenant les pays et écraser l’ancienne : http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
Pour terminer voici un lien vers la doc php : http://uk.php.net/manual/fr/book.geoip.php
Ainsi qu’un exemple d’utilisation avec le shell interactif
$ php -a Interactive shell php > $record = geoip_record_by_name('www.example.com'); php > var_dump($record); array(10) { ["country_code"]=> string(2) "US" ["country_code3"]=> string(3) "USA" ["country_name"]=> string(13) "United States" ["region"]=> string(2) "CA" ["city"]=> string(13) "Beverly Hills" ["postal_code"]=> string(5) "90210" ["latitude"]=> float(34.0994987488) ["longitude"]=> float(-118.414299011) ["dma_code"]=> int(803) ["area_code"]=> int(310) }