Idéalement, j'essaie de mettre en place un script PHP que je peux interroger depuis n'importe quel navigateur web et qui renvoie le pays de l'adresse IP qui a accédé au script PHP.
Est-ce possible ou existe-t-il une meilleure solution ?
Idéalement, j'essaie de mettre en place un script PHP que je peux interroger depuis n'importe quel navigateur web et qui renvoie le pays de l'adresse IP qui a accédé au script PHP.
Est-ce possible ou existe-t-il une meilleure solution ?
Il existe des API gratuites et simples que vous pouvez utiliser, comme celles-ci :
C'est à vous de décider lequel vous semble le plus digne de confiance :)
Sinon, il existe des scripts qui s'appuient sur les bases de données locales de votre serveur. Les données de la base de données doivent être mises à jour régulièrement, cependant. Regardez celui-ci :
HTH !
Edit : Et bien entendu, en fonction de votre projet, vous pouvez envisager de Emplacement HTML5 caractéristiques. Vous ne pouvez pas encore les utiliser sur Internet Explorer (IE9 le supportera, mais il reste encore du chemin à parcourir), mais si votre public se trouve principalement sur des appareils mobiles ou utilise Safari/Firefox, cela vaut vraiment la peine de s'y intéresser !
Une fois que vous avez les coordonnées, vous pouvez les géocoder en sens inverse vers un code pays. Là encore, il existe des API comme celle-ci :
Mise à jour, avril 2013
Aujourd'hui, je recommande d'utiliser Géocodeur Cette bibliothèque PHP permet de géocoder très facilement les adresses IP ainsi que les adresses postales.
***Mise à jour, septembre 2016
Depuis que la politique de confidentialité de Google a changé, vous ne pouvez pas utiliser l'API de géolocalisation HTML5 si votre serveur n'a pas de certificat HTPPS ou si l'utilisateur ne vous permet pas de vérifier sa position. Vous pouvez donc maintenant utiliser l'IP de l'utilisateur et vérifier sa position en PHP ou obtenir un certificat HTTPS.
Je pense que quelque chose a changé sur cette api depuis que la réponse a été postée, je reçois maintenant l'erreur suivante : "Le fournisseur GoogleMaps ne prend pas en charge les adresses IP, seulement les adresses de rue."
ipregistry.co est deux fois plus rapide et précis que ipdata.co : ipregistry.co/status (avertissement : je gère le service)
Il existe plusieurs API Web qui peuvent le faire pour vous. Voici un exemple utilisant mon service, http://ipinfo.io :
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->country; // -> "US"
Les API Web sont une solution rapide et facile, mais si vous devez effectuer de nombreuses recherches, il est préférable d'avoir une base de données IP -> pays sur votre propre machine. MaxMind propose un base de données gratuite que vous pouvez utiliser avec diverses bibliothèques PHP, notamment GeoIP .
Je m'abstiendrais de mettre en œuvre ipinfo.io dans un environnement de production. Je viens d'épingler un retard majeur dans nos scripts, à une fonction qui appelle ipinfo.io pour les détails IP. Assurez-vous de bien tester votre choix de fournisseur :)
Cela a pu être vrai dans le passé, mais ils sont désormais hébergés par plusieurs fournisseurs et dans plusieurs villes pour une disponibilité et une réactivité maximales. twitter.com/ipinfoio/status/458100167439159296
J'utilise hostip.info API . Les demandes à distance sont lentes, alors faites attention :)
Vous pouvez télécharger ip-tables depuis MaxMind :
http://www.maxmind.com/app/geolite
Importez le CSV dans votre base de données (veillez à créer un index pour ip_long_from + ip_long_to). Ensuite, vous pouvez simplement faire :
$iplong = ip2long($_SERVER['REMOTE_ADDR']);
// should use mysqli with prepared statements etc, but just an example
mysql_query("
SELECT country
FROM ip_table
WHERE $iplong BETWEEN ip_long_from AND ip_long_to
LIMIT 1
");
Je ne comprends pas comment les gens obtiennent les noms de villes et de pays localisés, car geolite ne propose que deux langues.
Toutes les solutions ci-dessus dépendent d'API gratuites qui ne sont pas très fiables dans la plupart des cas et présentent également des limites. Pour une solution fiable et illimitée et des performances plus rapides, vous pouvez créer votre propre base de données.
1) Importez la table SQL dans le lien ci-dessous dans votre base de données.
http://tarjim.com.au/ip2country.sql
2) Obtenir l'IP de l'utilisateur et la convertir en un nombre entier.
$ip = $_SERVER["REMOTE_ADDR"];
if(filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
if(filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
$ip = $_SERVER['HTTP_CLIENT_IP'];
$iparray = explode('.', $ip);
$ipdecimal = ($iparray[0] * 16777216) + ($iparray[1] * 65536) + ($iparray[2] * 256) + ($iparray[3]);
3) Recherchez l'entier IP de l'utilisateur dans les plages SQL.
$sql="SELECT code,name FROM ip2country WHERE ".$ipdecimal." BETWEEN min AND max";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$usercountrycode = $row[0];
$usercountryname = $row[1];
C'est ça !
echo "You live in".$usercountryname." - ".$usercountrycode;
/*will return something like: You live in Autsralia - AU*/
Profitez de votre propre outil de recherche d'adresses IP gratuit, fiable et illimité.
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.
4 votes
Note obligatoire : l'identification de l'adresse IP n'est pas une méthode fiable d'identification de la source en raison des divers proxies, VPN et autres horreurs. D'après les adresses IP, je suis en ce moment au Texas, en Norvège, en République tchèque et au Japon.
0 votes
IPLocate.io fournit une API gratuite :
https://www.iplocate.io/api/lookup/8.8.8.8
- Clause de non-responsabilité : Je dirige ce service.0 votes
Pour une solution rapide et fiable, vous devriez essayer Ipregistry.co : api.ipregistry.co/?key=tryout (avis de non-responsabilité : je gère le service).