Determiner le pays d'un visiteur

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

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.