begin process at 2008 07 20 22:42:39
1 213 476 membres
381 nouveaux aujourd'hui
14 167 membres club

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 : 7 494

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

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS