Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DETERMINER LE PAYS D'UN VISITEUR


Information sur la source

Catégorie :Astuces Niveau : Débutant Date de création : 05/07/2003 Date de mise à jour : 11/07/2003 08:22:40 Vu : 9 644

Note :
9,2 / 10 - par 10 personnes
9,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Grace à l'adresse IP du visiteur vous allez pouvoir trouver son pays.
Pour faire des stats sur son site c'est génial.

 

Source

  • // D'abord il faut telecharger sur ce site http://ip-to-country.directi.com/ dans la // section download le fichier latest IP-to-Country Database.csv.zip, créer une // table pays dans votre base avec 5 champs, IP_FROM(bigint 10), IP_TO(big // int10),CODE (varchar 5),CODE2 (varchar 5),PAYS (varchar 50).
  • // ensuite grace à la fonction ci-dessous, on insère le fichier qu'on a chargé sur // le serveur bien sur.
  • // Ensuite on récupère l'adresse IP grace à la fonction GetIP ci-dessous
  • // Puis enfin ;-) on lance fonction IpEnPays(GetIp());
  • // ou bien on peut afficher echo IpEnPays(GetIp());
  • //***************************************************
  • // Lecture et insertion du fichier ipcountry
  • //**********************************************
  • function LireFichier()
  • {
  • $sqllink=mysql_connect ("avec vos paramètres");
  • mysql_select_db($sqlDB,$sqllink);
  • $filename="ipcountry.txt"; // mettez le nom de votre fichier
  • // ouverture du fichier
  • $fd = fopen( $filename, "r");
  • :: Tant qu'on est pas à la fin
  • while (!feof($fd))
  • {
  • // on lit le fichier
  • $buffer = fgets($fd,1000);
  • // on découpe la chaine lue dans un tableau
  • $name=explode(",",$buffer);
  • // on enlève les " (on peut faire un boucle for pour éviter les 5lignes)
  • $name[0]=str_replace("\"","",$name[0]);
  • $name[1]=str_replace("\"","",$name[1]);
  • $name[2]=str_replace("\"","",$name[2]);
  • $name[3]=str_replace("\"","",$name[3]);
  • $name[4]=str_replace("\"","",$name[4]);
  • // on insère les valeurs dans la base
  • mysql_query ("INSERT INTO pays (IP_FROM,IP_TO,CODE,CODE2,PAYS) values ('".$name[0]."','".$name[1]."','".$name[2]."','".$name[3]."','".$name[4]."')",$sqllink) ;
  • }
  • fclose ($fd);
  • mysql_close($sqllink);
  • }
  • //*********************************************************
  • // Retourne l'adresse IP du visiteur
  • //*********************************************************
  • function get_IP() {
  • // Gestion des proxys
  • if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  • $IP = $_SERVER['HTTP_X_FORWARDED_FOR'];
  • elseif(isset($_SERVER['HTTP_CLIENT_IP']))
  • $IP = $_SERVER['HTTP_CLIENT_IP'];
  • else
  • $IP = $_SERVER['REMOTE_ADDR'];
  • return $IP;
  • }
  • //*********************************************************
  • // fonction qui ransforme l'IP en nombre
  • //*********************************************************
  • function IPAddress2IPNumber($dotted) {
  • $dotted = preg_split( "/[.]+/", $dotted);
  • $ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
  • return $ip;
  • }
  • //*********************************************************
  • // Fonction qui retourne le pays, en paramètre l'adresse IP
  • //*********************************************************
  • function IpEnPays($uneIp)
  • {
  • $sqllink=mysql_connect ("avec vos paramètres");
  • mysql_select_db($sqlDB,$sqllink);
  • // transforme l'ip en nombre
  • $uneIp=IPAddress2IPNumber($uneIp);
  • $select ="SELECT PAYS FROM pays WHERE ".$uneIp." BETWEEN IP_FROM AND IP_TO ";
  • $resPays=mysql_query($select,$sqllink);
  • if ($rowPays=mysql_fetch_row($resPays))
  • $retour=$rowPays[0];
  • else
  • $retour="Indeterminé";
  • mysql_free_result($resPays);
  • return $retour;
  • }
// D'abord il faut telecharger sur ce site http://ip-to-country.directi.com/ dans la // section download le fichier latest IP-to-Country Database.csv.zip, créer une    //  table pays dans votre base avec 5 champs, IP_FROM(bigint 10), IP_TO(big    // int10),CODE (varchar 5),CODE2 (varchar 5),PAYS (varchar 50).
// ensuite grace à la fonction ci-dessous, on insère le fichier qu'on a chargé sur // le serveur bien sur.
// Ensuite on récupère l'adresse IP grace à la fonction GetIP ci-dessous
// Puis enfin ;-) on lance fonction  IpEnPays(GetIp());
// ou bien on peut afficher echo IpEnPays(GetIp());

//***************************************************
//  Lecture et insertion du fichier ipcountry
//**********************************************
function LireFichier()
{
 $sqllink=mysql_connect ("avec vos paramètres");
 mysql_select_db($sqlDB,$sqllink);
 	
 $filename="ipcountry.txt"; // mettez le nom de votre fichier
// ouverture du fichier 
$fd = fopen( $filename, "r");
:: Tant qu'on est pas à la fin
 while (!feof($fd)) 
 {
     // on lit le fichier
    $buffer = fgets($fd,1000);
     // on découpe la chaine lue dans un tableau
    $name=explode(",",$buffer);
// on enlève les " (on peut faire un boucle  for pour éviter les 5lignes)
    $name[0]=str_replace("\"","",$name[0]);
    $name[1]=str_replace("\"","",$name[1]);
    $name[2]=str_replace("\"","",$name[2]);
    $name[3]=str_replace("\"","",$name[3]);
    $name[4]=str_replace("\"","",$name[4]);
// on insère les valeurs dans la base
mysql_query ("INSERT INTO pays (IP_FROM,IP_TO,CODE,CODE2,PAYS) values ('".$name[0]."','".$name[1]."','".$name[2]."','".$name[3]."','".$name[4]."')",$sqllink) ;
  }
  fclose ($fd);

mysql_close($sqllink);	

}
//*********************************************************
// Retourne l'adresse IP du visiteur
//*********************************************************
function get_IP() {  

   // Gestion des proxys
 if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    $IP    = $_SERVER['HTTP_X_FORWARDED_FOR'];  
  elseif(isset($_SERVER['HTTP_CLIENT_IP']))  
    $IP    = $_SERVER['HTTP_CLIENT_IP'];  
  else
    $IP    = $_SERVER['REMOTE_ADDR'];  
       
  return $IP; 
 }  
//*********************************************************
// fonction qui ransforme l'IP en nombre
//*********************************************************
function IPAddress2IPNumber($dotted) {
		  $dotted = preg_split( "/[.]+/", $dotted);
		  $ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
		  return $ip;
 }

//*********************************************************
 // Fonction qui retourne le pays, en paramètre l'adresse IP
//*********************************************************
function IpEnPays($uneIp)
{
 $sqllink=mysql_connect ("avec vos paramètres");
 mysql_select_db($sqlDB,$sqllink);	
 // transforme l'ip en nombre
	$uneIp=IPAddress2IPNumber($uneIp);
	$select ="SELECT PAYS FROM pays WHERE ".$uneIp." BETWEEN IP_FROM AND IP_TO ";
	$resPays=mysql_query($select,$sqllink);
	if ($rowPays=mysql_fetch_row($resPays))
		$retour=$rowPays[0];
	else
		$retour="Indeterminé";
		
	mysql_free_result($resPays);
	return	$retour;
}

 

Conclusion

Les pays sont en Anglais, il faut juste les mettre à jour manuellement ,(une petite demi-heure.)
Ce n'est pas trop compliqué à faire , et cela marche relativement bien, j'ai comparé avec xiti, j'obtiens quasiment les mêmes résultats.
N'hesitez pas à me contacter si vous avez des problèmes, le plus dur c'est d'inserer le fichier ipcountry dans votre base
 

Commentaires et avis

signaler à un administrateur
Commentaire de matrey le 06/07/2003 11:14:10

Je suppose que tu à fais la MAJ en -> fr, çà serait bien de nous la donner, flemmards qu'on est... :D

signaler à un administrateur
Commentaire de ala_daly le 12/12/2005 15:41:12

Je suppose que tu à fais la MAJ ; fr, çà serait bien de nous la donner,

MeRcI ...

signaler à un administrateur
Commentaire de XelectroX le 31/12/2007 22:06:52 9/10

J'ai fais un site du genre : http://membres.lycos.fr/geoip/ en utilisant les bdd de Maxmind(http://www.maxmind.com/app/php).

signaler à un administrateur
Commentaire de kymm le 04/03/2008 17:55:23

Pour les webmasters qui le désirent, je fournis un script PHP sur mon site Internet http://www.WeLive.fr dans la rubrique Géolocalisation par IP.
Le script PHP vous retourne les informations sous forme de variables PHP : Pays, Drapeau du pays, Région-Département-Code Postal pour la France, Ville.
Celui-ci nécessite une inscription préalable aux fins d'éviter que n'importe qui l'utilise.

A bientôt

WeLive.fr

signaler à un administrateur
Commentaire de nlion le 06/03/2008 18:30:24

> http://membres.lycos.fr/geoip/ : Le pays est le bon mais pour la ville on est loin de la bonne réponse...
> J'ai fait un petit script de localisation par pays sur une carte du monde (avec ip) si vous voulez sur http://www.phpcs.com/codes/LOCALISER-VISITEURS-VOTRE-SITE-SUR-CARTE_45966.aspx

> Je n'avais pas pensé à Gestion des proxys. ;) merci

Bonne continuation

signaler à un administrateur
Commentaire de scanner68 le 16/05/2008 16:22:43

ta source ne marche pas j'ai une erreur
Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /mnt/146/sda/5/2/webojeux/test/test.php on line 26
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /mnt/146/sda/5/2/webojeux/test/test.php on line 45

et pourtant j'ai bien remplie le mysql_connect et le mysql_select_db

signaler à un administrateur
Commentaire de djiby1 le 08/06/2008 21:44:25 8/10

Bonjour,

J'ai eu le même problème est j'ai modifier le script comme suit :

Cordialement
djiby


$conect = @mysql_connect("tonserveursql", "loginsql", "tonpass");
$selectdb = @mysql_select_db("nomdelabase");
include 'cbdd.php';
function get_IP()
{  
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$IP = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
$IP = $_SERVER['HTTP_CLIENT_IP'];
else
$IP = $_SERVER['REMOTE_ADDR'];
return $IP;
}
function IPAddress2IPNumber($dotted)
{
$dotted = preg_split( "/[.]+/", $dotted);
$ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
return $ip;
}
function IpEnPays($uneIp)
{
$uneIp=IPAddress2IPNumber($uneIp);
$select ="SELECT PAYS FROM pays WHERE ".$uneIp." BETWEEN IP_FROM AND IP_TO ";
$resPays=mysql_query($select);
if ($rowPays=mysql_fetch_row($resPays))
$retour=$rowPays[0];
else
$retour="Indeterminé";
$fin = mysql_free_result($resPays);
return $retour;
}
$lepays = IpEnPays(Get_Ip());
//Affichage du pays
echo ("$lepays");

signaler à un administrateur
Commentaire de djiby1 le 08/06/2008 21:46:18

Oup's désolé d'écrire une seconde fois mais je viens de voir que j'ai fait une erreur.
la ligne qui suit est en trop :

include 'cbdd.php';

Cordialement
djiby

signaler à un administrateur
Commentaire de djiby1 le 08/06/2008 21:49:42

En ce qui concerne le chargement du fichier ip-to-country.csv dans SQL voici le script modifié :

Cordialement
djiby

$conect = @mysql_connect("tonserveursql", "loginsql", "tonpass");
$selectdb = @mysql_select_db("nomdelabase");
function LireFichier()
{
$filename="ip-to-country.csv";
// ouverture du fichier
$fd = fopen( $filename, "r");
// Tant qu'on est pas à la fin
while (!feof($fd))
{
// on lit le fichier
$buffer = fgets($fd,1000);
// on découpe la chaine lue dans un tableau
$name=explode(",",$buffer);
// on enlève les " (on peut faire un boucle  for pour éviter les 5lignes)
$name[0]=str_replace("\"","",$name[0]);
$name[1]=str_replace("\"","",$name[1]);
$name[2]=str_replace("\"","",$name[2]);
$name[3]=str_replace("\"","",$name[3]);
$name[4]=str_replace("\"","",$name[4]);
// on insère les valeurs dans la base
$ip = mysql_query("INSERT INTO pays (IP_FROM,IP_TO,CODE,CODE2,PAYS) values ('".$name[0]."','".$name[1]."','".$name[2]."','".$name[3]."','".$name[4]."')");
}
fclose ($fd);
}
LireFichier();

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.