En fait la géolocalisation par IP n'est pas une science exacte et nécessite une mise à jour régulière des bases qui gèrent les infos de GeoIP.
Du coup cela arrive régulièrement d'avoir des résultats inexactes.
La société qui a le plus d'expérience et qui a les données les plus à jour est MaxMind et ils indiquent de façon transparente la précision de leur géolocalisation par IP ici :
https://www.maxmind.com/fr/geoip2-city-accuracy
L'intérêt de la librairie que je t'ai recommandé, c'est justement de pouvoir tester différents fournisseurs de géolocalisation en en changeant quasiment rien dans son code.
Liste des fournisseurs de géoIP gérés par geocoder :
- FreeGeoIpProvider as IP-Based geocoding provider;
- HostIpProvider as IP-Based geocoding provider;
- IpInfoDBProvider as IP-Based geocoding provider (city precision); // API key nécessaire
- GeoipProvider, the PHP extension, as IP-Based geocoding provider; // à installer
- GeoPluginProvider as IP-Based geocoding provider;
- GeoIPsProvider as IP-Based geocoding provider; // API key nécessaire
- MaxMindProvider web service as IP-Based geocoding provider (City/ISP/Org and Omni services); // API key nécessaire
- MaxMindBinaryProvider Binary Files as IP-Based geocoding provider; // à installer
Et si tu changes de fournisseur pour utiliser GeoPlugin, tu obtiens comme résultat "Charavines" qui doit être plus proche de chez toi.
<?php
// on va chercher le fichier
require_once 'src/autoload.php';
$geocoder = new \Geocoder\Geocoder();
$adapter = new \Geocoder\HttpAdapter\CurlHttpAdapter();
$result = $geocoder->registerProvider(new \Geocoder\Provider\GeoPluginProvider($adapter))
// test avec mon ip
->geocode($_SERVER["REMOTE_ADDR"]);
echo $result->getCity();
Un truc important, il faut que tu évalues ton besoin pour être sûr que tu ne dépasses pas ce qui est possible de faire gratuitement car tous ces services ont une offre de base gratuite mais sont limitées en nombre de requêtes, par exemple
GeoPlugin est limité à 120 demandes de géolocalisation par minutes, au delà, ils ont une version payante. Ou alors, il faut regarder du côté des autres fournisseurs, c'est pour cela qu'il est souvent nécessaire de créer un compte pour avoir une clé d'API.