Une solution gratuite pour Geolocaliser les visiteurs d’un site web avec PHP


    


Alaa-eddine

Maxmind est une société qui propose des solutions de géolocalisation et de lutte contre les fraudes sur internet.

Bien que ces services soient payants, la société propose gratuitement des bases de données de géolocalisation à partir d’adresses IP. Les versions proposées dites « lite » permettent une localisation assez précises, mais vous pouvez vous procurer des versions payantes si vous avez besoins de précision plus élevée.

Dans cet article je vous explique comment utiliser simplement les bases de données (gratuites ou payantes) de MaxMind.

Préparation de l’environnement

Tout d’abord il faut télécharger les bases de données

La base de données des pays se trouve ici
http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

La base de données des villes se trouve ici
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

téléchargez ces deux bases puis décompressez les dans un dossier, non accessible à partir du web de préférence.

Ensuite vous avez besoins de télécharger la librairie php permettant de lire ces bases.

dans votre chemin web cette fois, créer un dossier includes et placez dedans ces fichiers

http://geolite.maxmind.com/download/geoip/api/php/geoip.inc

http://geolite.maxmind.com/download/geoip/api/php/geoipcity.inc

http://geolite.maxmind.com/download/geoip/api/php/geoipregionvars.php

 

 

Geo localisation des Pays (IP to country)

L’environnement est prêt, reste à écrire le code de géolocalisation, rassurez vous, maxmind fournit déjà tout ce qu’il faut dans les fichiers que nous avons placé dans include.

Voici le bout de code à utiliser pour localiser un pays.

include("includes/geoip.inc");
$ip = $_SERVER['REMOTE_ADDR'];
$gi = geoip_open("/chemin/vers/GeoIP.dat",GEOIP_STANDARD);

echo geoip_country_code_by_addr($gi, $ip);  // code pays : MA, FR,
echo geoip_country_name_by_addr($gi, $ip);  // nom complet du pays
geoip_close($gi);

 

 

Geo localisation des des villes (IP to city)

Pour localiser les villes de vos visiteurs à partir des IP, c’est le même principe, sauf que cette fois on va inclure les deux autres fichiers fournis par Maxmind.

include("includes/geoipcity.inc");
include("includes/geoipregionvars.php");

$ip = $_SERVER['REMOTE_ADDR'];
$gi = geoip_open("/chemin/vers/GeoIPCity.dat",GEOIP_SHARED_MEMORY);
$record = geoip_record_by_addr($gi, $ip);
echo $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "<br />";
echo $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "<br />";
echo $record->city . "<br />";
echo $record->postal_code . "<br />";
echo $record->latitude . "<br />";
echo $record->longitude . "<br />";
echo $record->metro_code . "<br />";
echo $record->area_code . "<br />";

geoip_close($gi);

Notez  l’utilisation de  GEOIP_SHARED_MEMORY à la ligne 5, cette directive peut être utilisé avec geoip_open pour éviter d’ouvrir plusieurs fois en mémoire la base de données Maxmind, elle peut être utilisé pour GeoIPCity.dat et GeoIP.dat ; le but étant d’économiser de la RAM si vous avez beaucoup d’accès concurrents.

 

Fiabilité de la géolocalisation

Ayant testé ce code sur plusieurs sites, la geolocalisation de pays semble être cohérente dans la majorité des cas, la geolocalisation de villes par contre est moins fiable pour le Maroc.

C’est peut-être simplement due au fait qu’au Maroc les IP fixes ne sont pas encore généralisées.
Généralement, la localisation par pays couvre la grande majorité des besoins applicatifs, mais si la localisation par ville est indispensable pour vous, sachez que des solutions payantes existent sous forme de web services. Dans tous les cas, cette la géolocalisation n’est jamais fiable à 100%.

 

 

 

Voici donc tout ce qu’il vous faut pour développer des applications/sites web avec le support IP-> Pays, IP -> villes .
Si vous trouvez cet article utile, n’hésitez pas à poster en commentaire les application que vous en faites 😉



 

A lire également