begin process at 2010 02 10 17:04:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > DETERMINER LE PAYS D'UN VISITEUR

DETERMINER LE PAYS D'UN VISITEUR


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : sunny

Ecrire un message privé
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


 Sources du même auteur

DETERMINER LE SYSTÈME D'EXPLOITATION D'UN VISITEUR
DETERMINER LE NOM DU NAVIGATEUR ET LA VERSION

 Sources de la même categorie

Source avec une capture PAGINATION EN PHP par Orangina
Source avec Zip POO - DEBUGGER par DiGhan
Source avec Zip CRAWLER DE SITE EN PHP par Mcjo
DÉCOUPAGE D'UN TEXTE EN FONCTION DES SAUTS DE LIGNES par biloubil
RÉCUPÉRER LE CHEMIN RELATIF D'UN OBJET PAR RAPPORT À LA RACI... par FredPsy

Commentaires et avis

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

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

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).

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

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

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

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");

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

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

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,919 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales