LOCALISER LES VISITEURS DE VOTRE SITE SUR UNE CARTE
neo2k2
Messages postés126Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention 9 novembre 2009
-
6 mars 2008 à 09:38
MacGaliver
Messages postés146Date d'inscriptionvendredi 28 mai 2010StatutMembreDernière intervention21 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.
nlion
Messages postés12Date d'inscriptionvendredi 10 septembre 2004StatutMembreDerniè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és188Date d'inscriptionmercredi 15 mai 2002StatutMembreDernière intervention25 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és12Date d'inscriptionvendredi 10 septembre 2004StatutMembreDerniè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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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és224Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention29 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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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és126Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention 9 novembre 20094 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...
29 juin 2012 à 10:50
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
20 août 2010 à 16:02
23 mars 2008 à 23:42
10 mars 2008 à 08:42
Pas mal... Perso j'utilise GeoIP (http://www.maxmind.com/app/php) et GoogleMaps.
Bonne continuation.
6 mars 2008 à 20:28
Sinon, il faut utiliser les variables $_SERVER['HTTP_X_FORWARDED_FOR'],$_SERVER['HTTP_CLIENT_IP'].
++
6 mars 2008 à 19:50
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 ;)
6 mars 2008 à 12:32
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,
6 mars 2008 à 11:49
6 mars 2008 à 11:33
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.
6 mars 2008 à 11:27
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 :)
6 mars 2008 à 09:38
Petite suggestion pour la suite: simplement ajouter au dessus de chaque point correspondant à un pays: le nom du pays, le nombre de visiteurs...