Convertir une IP en pays et afficher son drapeau

Le site http://ip-to-country.com fournit une base de donnée fiable (ce site est édité pour une société accréditée par l’ICANN) qui permet de rattacher une adresse IP à un pays.

Le base est téléchargeable en format CSV ici : http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip

En important ce fichier sous mysql ou autre vous aurez une belle base de plus de 100’000 enregistrements à exploiter :

ip_from ip_to country_code country_name
16777216 17367039 au australia
17367040 17432575 my malaysia
17432576 17498111 au australia
17498112 17563647 kr republic of korea
17563648 17825791 cn china
17825792 18087935 kr republic of korea
18087936 18153471 au australia
18153472 18219007 jp japan
18219008 18350079 in india

Les adresses IP sont enregistrées en mode littéral, pour convertir une IP standard (xx.xx.xx.xx) en IP littéral  (xxxxxxxx) utilisez la fonction php « ip2long() »

Pour obtenir le pays à partir de l’IP :

[php]<?php
$ip = $_SERVER[« REMOTE_ADDR »];
$long = ip2long($ip);
// vous devez être connecté à mysql
$sql = ‘SELECT `country_code`,`country_name` FROM `nom_base_ip-to-country` WHERE `ip_from` <= ‘.$long.’ AND `ip_to` >= ‘.$long.’;’;
$pays = mysql_fetch_assoc($sql);
if (isset($pays)) echo $pays[‘country_name’]; //affichera le nom du pays…
else echo ‘Pas de correspondance’; //ou à défaut ce message
?>[/php]

Sous WordPress remplacer les lignes 5 et 6 par :
[php]
$pays = $wpdb->get_row(‘SELECT `country_code`,`country_name` FROM `ip2c` WHERE `ip_from` <= ‘.$long.’ AND `ip_to` >= ‘.$long.’;’, ARRAY_A);
[/php]

Pour afficher le drapeau associé au pays vous devez avoir un ensemble de drapeau nommé avec le code du pays (fr, us, ca) le site famfamfam.com en propose 247 en petits formats png ou gif.
[php]<?php
if (isset($pays)) echo ‘<img src= »dossier_de_drapeaux/’.$pays[‘country_code’].’.png » alt= »‘.$pays[‘country_name’].' » />’;
?>[/php]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.