Géolocalisation de vos visiteurs grâce à leur ip et a php
Introduction
Lorsque l on possède un site, il est bien sur ouvert au monde entier, il peut être intéressant de savoir de quels pays viennent les internautes pour par exemple :
- leur fournir un contenu différent
- afficher le site dans la bonne langue…
Il existe de multiples solutions, gratuites ou payantes.
On peut acheter une base de donnée ou passer par des webservices.
Les webservices
Le problème majeur dans ce type de solution reste le temps de latence entre la demande et le résultat ce qui peut donc ralentir grandement votre site. De plus vous êtes tributaire d’un prestataire qui peut très bien avoir une coupure de service ou même carrément tout arrêter du jour au lendemain.
Les bases de donnée.
Solution bien souvent payante mais qui a l avantage d être plus rapide. elle peut néanmoins consommer pas mal de ressources suivant sur votre site.
La solution !!!
A force de recherche j ai fini par trouver une vrai solution efficace qui mérite d être connue!!
Il existe une bibliothèque native dans php qui fait ce travail : geoip !!!
Je vais donc vous montrer comment la mettre sous php5 sur une Debian et l accoupler avec une banque de donnée gratuite de maxmind que nous mettrons a jour grâce à un cron.
Installation
Allez c est parti pour un tour, on va commencer par récupérer la base de donnée d ip par pays disponible via maxmind
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz mkdir /usr/share/GeoIP mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
Maintenant on installe la librairie qu il nous faut
apt-get update apt-get install php5-geoip
Il nous reste plus qu a faire une petite configuration dans le fichier .ini de geoip
echo "geoip.custom_directory = /usr/share/GeoIP" >> /etc/php5/conf.d/geoip.ini
On reload apache
/etc/init.d/apache2 restart
On vérifie avec un phpinfo qui devrait vous donnez cela :
Utilisation
L utilisation de la bibliothèque est très très simple je vous renvoie à la doc sur le site php pour plus d info :
http://www.php.net/manual/fr/book.geoip.php
Voici un exemple très simple pour tester :
echo "<pre>"; print_r(geoip_record_by_name($_SERVER['REMOTE_ADDR'])); echo "</pre>";
Qui donne le résultat suivant :
Array
(
[continent_code] => EU
[country_code] => FR
[country_code3] => FRA
[country_name] => France
[region] =>
[city] =>
[postal_code] =>
[latitude] => 46
[longitude] => 2
[dma_code] => 0
[area_code] => 0
)
Et le tour est joué. Cette base est gratuite et ne possède pas beaucoup de donnée mais vous pouvez très bien avoir plus d information avec une base payante.
Mise à jour
Maintenant que tout cela marche bien il est temps de mettre tout cela à jour de manière automatique grâce a un cron
Perso moi je veux faire la mise a jour une fois par semaine
touch /etc/cron.weekly/geoip_update.sh chmod a+x /etc/cron.weekly/geoip_update.sh
Editez le fichier et coller les lignes suivantes
cd ~ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
Voila le tour est joué



2 comments