LOCALISER LES VISITEURS DE VOTRE SITE SUR UNE CARTE

neo2k2 Messages postés 126 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 9 novembre 2009 - 6 mars 2008 à 09:38
MacGaliver Messages postés 146 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 21 juillet 2013 - 29 juin 2012 à 10:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45966-localiser-les-visiteurs-de-votre-site-sur-une-carte

MacGaliver Messages postés 146 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 21 juillet 2013 3
29 juin 2012 à 10:50
HEINS ?
Un énormément énorme !

function generer_num_ip($addr_ip)
{

$decomposition = preg_split( "/[.]+/", $addr_ip);

$numip = (double) (16777216*$decomposition[0] + 65536*$decomposition[1] + 256*$decomposition[2] + $decomposition[3]);

return( $numip );

}

function process_csv($file, $ipnum)
{
// Ouvrir le fichier
$handle = fopen($file, "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{ // Pour Chaque Ligne Lu

if( ($ipnum >= $data[2]) &&
($ipnum <= $data[3]) )
{
// Sortir du while
break;
}
}
fclose($handle);

return $data[5];

}

// Enregistrement du Timestamp avant execution du script
$start_time = microtime(true);

// Recuperation de l'addresse IP
$ip = $_SERVER['REMOTE_ADDR'] ;

// Affichage de l'Addrese IP
echo"

Votre IP est: $ip

";

// Obtention du Numero Ip associe
$ipnum = generer_num_ip( $ip );

// Affichage du Numero Ip associe
echo"Numero IP associe: $ipnum

";

// Obtention du Pays associe a ce Numero Ip
$country = process_csv ( 'GeoIPCountryWhois.csv', $ipnum);

// Affichage du Pays
echo"Votre Pays: $country

";

// Enregistrement du Timestamp apres execution du script
$stop_time = microtime(true);

// Cacul de la duree d'execution du script en Milisecondes
$duration = 1000*($stop_time - $start_time);

echo "Temps d'execution du script: $duration ms ";

Fichier CVS: http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

Source: http://www.formatix.eu/geolocaliser-une-ip.html
kertimanoff Messages postés 75 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 30 juin 2013
20 août 2010 à 16:02
disont que en gros, ça nous situ dans le bon fuseau horaire
cs_yatoo Messages postés 46 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 2 mai 2011
23 mars 2008 à 23:42
SYMPA
Utilisateur anonyme
10 mars 2008 à 08:42
Salut,

Pas mal... Perso j'utilise GeoIP (http://www.maxmind.com/app/php) et GoogleMaps.

Bonne continuation.
nlion Messages postés 12 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 1 mars 2009
6 mars 2008 à 20:28
Non, il ne le gère pas. Sur ce script, je ne fournis pas la partie enregistrement de l'ip du visiteur. Ce sont quelques lignes de code simple à faire sur votre site. Le contrôle des rebonds peut se faire à ce niveau.

Sinon, il faut utiliser les variables $_SERVER['HTTP_X_FORWARDED_FOR'],$_SERVER['HTTP_CLIENT_IP'].

++
apxa Messages postés 188 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 25 avril 2009
6 mars 2008 à 19:50
iop,
le truc c'est que je ne suis pas sur qu'il gére les rebond sur les proxy.
donc les données peuvent être faussées.

have fun ;)
nlion Messages postés 12 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 1 mars 2009
6 mars 2008 à 12:32
Merci pour les commentaires.

Pour répondre à rambc, tu peux ajouter cette option (il faut la programmer), par contre la base de données des plages ip par région est payante contrairement à celle des pays.

Concernant l'objet bdd, je suis d'accord. Çà va pas du tout (Connections / déconnections inutiles).

Pour optimiser le code, il faudrait construire la carte à partir d'une liste de pays avec compteur. On déterminerait le nom du pays du visiteur dès sa visite sur le site (par ex).
Une mise en cache de la carte ne serait pas inutile(régénérer toutes les heures).

Pour les options, en effet des indications comme les noms de pays et le nombre de visites sont importantes. Il faudra choisir une carte plus grande je crois.

C'est un début de programme. J'ai voulu le partagé, peut-être un peu vite car il n'est pas encore top optimisé. J'utilise souvent phpcs.com , c'est la raison pour laquelle j'ai voulu aussi participer un peu au contenu.

A suivre,
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
6 mars 2008 à 11:49
Mea culpa, tu pourrais pas le faire en deux requêtes comme j'ai dit plus haut vu qu'il faut chercher chaque IP, mais bon tu peux quand même largement optimiser le nombre de requete :)
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
6 mars 2008 à 11:33
C'est sympa.

J'aurais voulu savoir s'il était possible de préciser la localisation au cas de la France. Par exempe, en indiquant les régions.
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
6 mars 2008 à 11:27
Salut,

Coté rendu super, j'ai les même suggestion que neo2k2, afficher le nombre par pays. Mais coté code c'est pas fort.... Ça a LARGEMENT besoin d'optimisation tout ça: GlobalLocalisation appel UniqueLocalisation à CHAQUE IP qui elle même appele DataBaseFunctions. Et DataBaseFunctions Fait une requête mysql et un select database a chaque fois... c'est effroyable sur 1000 IP tu vas tuer le serveur :/ . Tu pourrais faire ça en deux requêtes maximum alors que toi tu en fais au moin 2500.

Enfin ça prends plusieurs secondes (10-20) génerer une carte pour 1000 visiteurs, c'est beaucoup trop, ça devrait en prendre a peine 0.5 secondes.

Mais je connaissais pas ip-to-country.com, cela fesait longtemps que je voulais faire un script comme ça, grace à cet db je vais pouvoir le faire.

Si un "guru" du php passe par ici je sens qu'il va pleurer sur ta classe MySql lol Mais je te souhaite bonne chance pour ton script, et surtout pour l'optimiser, parce que c'est très interessant comme script :)
neo2k2 Messages postés 126 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 9 novembre 2009 3
6 mars 2008 à 09:38
Très joli code, je ne me suis pas penché sur la programmation en détail mais le résultat rend très bien.

Petite suggestion pour la suite: simplement ajouter au dessus de chaque point correspondant à un pays: le nom du pays, le nombre de visiteurs...
Rejoignez-nous