Determiner le pays d'un visiteur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 924 fois - Téléchargée 28 fois

Contenu du snippet

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

Source / Exemple :


// 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

A voir également

Ajouter un commentaire Commentaires
Messages postés
5
Date d'inscription
jeudi 5 juillet 2007
Statut
Membre
Dernière intervention
15 juillet 2008

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();
Messages postés
5
Date d'inscription
jeudi 5 juillet 2007
Statut
Membre
Dernière intervention
15 juillet 2008

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
Messages postés
5
Date d'inscription
jeudi 5 juillet 2007
Statut
Membre
Dernière intervention
15 juillet 2008

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");
Messages postés
12
Date d'inscription
jeudi 6 octobre 2005
Statut
Membre
Dernière intervention
8 juin 2008

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
Messages postés
12
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
1 mars 2009

> 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
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.