209 votes

Obtenir la localisation à partir d'une adresse IP

Je veux récupérer des informations comme la ville, l'état et le pays d'un visiteur à partir de son adresse IP, afin de pouvoir personnaliser ma page Web en fonction de sa localisation. Existe-t-il un moyen efficace et fiable de faire cela en PHP ? J'utilise JavaScript pour les scripts côté client, PHP pour les scripts côté serveur et MySQL pour la base de données.

266voto

Ben Dowling Points 2849

Vous pouvez télécharger une base de données GeoIP gratuite et rechercher l'adresse IP localement, ou vous pouvez utiliser un service tiers et effectuer une recherche à distance. C'est l'option la plus simple, car elle ne nécessite aucune configuration, mais elle introduit une latence supplémentaire.

Un service tiers que vous pouvez utiliser est http://ipinfo.io . Ils fournissent le nom d'hôte, la géolocalisation, le propriétaire du réseau et des informations supplémentaires, par exemple :

$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "loc": "37.385999999999996,-122.0838",
  "org": "AS15169 Google Inc.",
  "city": "Mountain View",
  "region": "CA",
  "country": "US",
  "phone": 650
}

Voici un exemple en PHP :

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
echo $details->city; // -> "Mountain View"

Vous pouvez également l'utiliser côté client. Voici un exemple simple en jQuery :

$.get("http://ipinfo.io", function(response) {
    console.log(response.city);
}, "jsonp");

et un exemple javascript plus détaillé : http://jsfiddle.net/zK5FN/2/

1 votes

Vous pouvez vous assurer que vous ajoutez un json à la fin de l'URL pour vous assurer que vous obtenez un json au lieu de la page Web complète. $details = json_decode(file_get_contents(" ipinfo.io {$ip}/json")) ;

0 votes

Vous obtenez JSON sans ajouter /json également si vous le demandez à partir de PHP et non d'un navigateur web.

0 votes

Pas toujours. J'ai récupéré la page web et je l'ai exécutée en PHP.

55voto

Jamie Hutber Points 4666

J'ai pensé poster un message car personne ne semble avoir donné d'informations sur cette API particulière. Mais elle renvoie exactement ce que je cherche et vous pouvez la faire revenir dans plusieurs formats, json, xml and csv .

 $location = file_get_contents('http://freegeoip.net/json/'.$_SERVER['REMOTE_ADDR']);
 print_r($location);

Cela vous donnera tout ce que vous pouvez désirer :

{
      "ip": "77.99.179.98",
      "country_code": "GB",
      "country_name": "United Kingdom",
      "region_code": "H9",
      "region_name": "London, City of",
      "city": "London",
      "zipcode": "",
      "latitude": 51.5142,
      "longitude": -0.0931,
      "metro_code": "",
      "areacode": ""

}

1 votes

Hey Jamie FreegeoIp.net ne fonctionne pas. Y a-t-il un autre moyen ?

0 votes

Désolé, pas pour le moment, mais c'est dommage car c'est le service que j'utilise sur mes sites en direct. J'espère qu'ils reviendront un jour.

2 votes

Principalement vers le bas et donne rarement une région ou une ville

16voto

Raposo Points 159

Utilisation de Google APIS :

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script>
contry_code = google.loader.ClientLocation.address.country_code
city = google.loader.ClientLocation.address.city
region = google.loader.ClientLocation.address.region
</script>

9 votes

The geolocation functionality in the Loader hasn't been retired, per se. We stopped documenting it several years ago and have recommended the HTML-based solutions due to their improved accuracy, but the functionality itself has not been removed from the Loader at this time. code.google.com/p/google-ajax-apis/issues/detail?id=586

0 votes

Qu'en est-il de la qualité de cette géolocalisation Google APIS IP ? (elle l'est, ou je me trompe ?), par rapport à d'autres services tels que ipinfo.io ?

0 votes

J'ai demandé à ~ 30 personnes dans différentes villes, et la qualité de la géolocalisation IP de Google APIS est médiocre par rapport à ipinfo.io

15voto

null Points 3159

Vous devez utiliser un service externe... tel que http://www.hostip.info/ si vous recherchez "geo-ip" sur google, vous obtiendrez plus de résultats.

L'API Host-IP est basée sur le protocole HTTP. Vous pouvez donc l'utiliser en PHP ou en JavaScript, selon vos besoins.

6 votes

J'utilise hostip.info depuis un an maintenant et je ne suis PAS impressionné. Il renvoie généralement des chèques inconnus 9/10

0 votes

Je suis d'accord, il me dit que je vis à Woking... Pour être honnête, la GB est correcte... Mais je suis à Londres.

2 votes

N'oubliez pas que la qualité d'un service dépend des informations et des données publiques disponibles. Pour des raisons de protection de la vie privée, ces informations ne peuvent être qu'approximatives. Si votre pays est correctement identifié et que l'état/province est au moins proche, je considère que c'est une victoire. Si vous l'utilisez pour rechercher des informations en vue d'une attaque DOS, n'oubliez pas que les adresses IP peuvent ne pas être valides (non attribuées à quelqu'un ou en dehors de la plage des adresses IP publiques valides).

8voto

Isaac Waller Points 9218

Consultez l'API de hostip.info - elle fournit de nombreuses informations.
Exemple en PHP :

$data = file_get_contents("http://api.hostip.info/country.php?ip=12.215.42.19");
//$data contains: "US"

$data = file_get_contents("http://api.hostip.info/?ip=12.215.42.19");
//$data contains: XML with country, lat, long, city, etc...

Si vous faites confiance à hostip.info, il semble que cette API soit très utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X