LOCALISER LES VISITEURS DE VOTRE SITE SUR UNE CARTE

Signaler
Messages postés
126
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
9 novembre 2009
-
Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
-
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

Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
3
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
Messages postés
75
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
30 juin 2013

disont que en gros, ça nous situ dans le bon fuseau horaire
Messages postés
46
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
2 mai 2011

SYMPA
Messages postés
74
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2013

Salut,

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

Bonne continuation.
Messages postés
12
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
1 mars 2009

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

++
Messages postés
188
Date d'inscription
mercredi 15 mai 2002
Statut
Membre
Dernière intervention
25 avril 2009

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

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,
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

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 :)
Messages postés
224
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
29 mars 2009

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.
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

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 :)
Messages postés
126
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
9 novembre 2009
2
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...