Accueil > > > GÉOLOCALISATION DE VOS VISITEURS (REVISÉ)
GÉOLOCALISATION DE VOS VISITEURS (REVISÉ)
Information sur la source
Description
Bonjour à tous C'est une source sans aucune prétention que je poste suite à la source de nlion que vous pouvez trouver ici : http://www.phpcs.com/codes/LOCALISER-VISITEURS-VOT RE-SITE-SUR-CARTE_45966.aspx J'ai fais une source qui fait sensiblement la même chose mais plus optimisé autant en temps qu'en longueur du code. J'ai d'ailleurs pris sa liste de coordonées de pays que j'ai modifier afin d'avoir le nom complet du pays, je le remercis :). Ajout: 1.Mise à jour en temps réel de la base de IP (associer le IP au pays avant de l'inserer: sauve du temps de traitement) 2.Prise en charge d'un cache pour l'image. 3.Top 20 des pays les plus visités sur l'image Prérequis: Un serveur avec MySql, php et la librairie GD Utilisation: Importer le fichier sql/import_me.sql.gz dans votre base Éditer le fichier config.php index.php : affiche l'image index.php?force=1 : Force la mise à jour de la base, par exemple si vous avez une liste d'IP qui ne sont pas associé à aucun pays vous pouvez lancer le script qui va trouver le pays des ips déja présent et noter leurs pays. visits.php: page à inclure en haut de chacunes de vos pages pour ajouter le ip et son pays en temps réel. Le mieu est d'ajouter visits.php sur chaque page, mais si vous trouver ça trop lent vous pouvez ajouter visits_nolookup.php sur chaque page, et executer index.php?force=1 environ une fois par jour. Bugs ? Il ne devrait pas y en avoir Amélioration possible ? Sans aucun doute, à vous de ne le dire ;) . Démo: http://jolteon.net/geo/
Source
- <?php
- include('config.php');
- header('Content-type: image/png');
-
- /*Indice de taille pour le cercle */
- (array) $indice = Array(1000=>18,500=>15,100=>11,10=>8,1=>5);
-
- if (!file_exists('cache/map.png') || filemtime('cache/map.png')+$CACHE_TTL < time() || isset($_GET['force']))
- {
- $img = imagecreatefromgif('img/map2.gif');
- $black = imagecolorallocate($img,0,0,0);
- if (@mysql_connect($mysql['HOTE'],$mysql['USER'],$mysql['PASSWORD']))
- {
- if (@mysql_select_db($mysql['DATABASE']))
- {
- if($query = mysql_query('SELECT country,count,(Select map_position.x from map_position where map_position.COUNTRY_CODE= visitors.country),(Select map_position.y from map_position where map_position.COUNTRY_CODE= visitors.country) FROM `visitors` where country!=\'\' ORDER BY `count` DESC'))
- {
- if (mysql_num_rows($query)>0)
- {
- (int) $cn = 10;
- while ($tab = mysql_fetch_row($query))
- {
- foreach ($indice as $nbr=>$size) if ($nbr<$tab[1]) break;
-
- $color = imagecolorallocate($img, rand(120,220), rand(120,220), rand(120,220));
- imagefilledellipse ($img,imagesx($img)*$tab[2] ,imagesy($img)*$tab[3],$size,$size,$color);
-
- ++$cn;
- if ($cn <30)
- imagestring($img, 3 ,2, $cn*10, $tab[0].' : '.$tab[1], $color);
- }
-
- $x = imagesx($img);
- foreach ($indice as $nbr=>$size)
- {
- $x -= 30;
- imagefilledellipse ($img,$x ,imagesy($img)-24,$size,$size,$black);
- imagestring($img, 2 ,$x-5, imagesy($img)-15, $nbr, $black);
- }
- }
- @imagepng($img,'cache/map.png');
- }
- }
- }
-
- if (mysql_error() !== '')
- imagestring($img, 3 ,2, 10, 'Erreur SQL: '. mysql_error(), $black);
-
- imagepng($img);
- }
- else
- readfile('cache/map.png');
- ?>
<?php
include('config.php');
header('Content-type: image/png');
/*Indice de taille pour le cercle */
(array) $indice = Array(1000=>18,500=>15,100=>11,10=>8,1=>5);
if (!file_exists('cache/map.png') || filemtime('cache/map.png')+$CACHE_TTL < time() || isset($_GET['force']))
{
$img = imagecreatefromgif('img/map2.gif');
$black = imagecolorallocate($img,0,0,0);
if (@mysql_connect($mysql['HOTE'],$mysql['USER'],$mysql['PASSWORD']))
{
if (@mysql_select_db($mysql['DATABASE']))
{
if($query = mysql_query('SELECT country,count,(Select map_position.x from map_position where map_position.COUNTRY_CODE= visitors.country),(Select map_position.y from map_position where map_position.COUNTRY_CODE= visitors.country) FROM `visitors` where country!=\'\' ORDER BY `count` DESC'))
{
if (mysql_num_rows($query)>0)
{
(int) $cn = 10;
while ($tab = mysql_fetch_row($query))
{
foreach ($indice as $nbr=>$size) if ($nbr<$tab[1]) break;
$color = imagecolorallocate($img, rand(120,220), rand(120,220), rand(120,220));
imagefilledellipse ($img,imagesx($img)*$tab[2] ,imagesy($img)*$tab[3],$size,$size,$color);
++$cn;
if ($cn <30)
imagestring($img, 3 ,2, $cn*10, $tab[0].' : '.$tab[1], $color);
}
$x = imagesx($img);
foreach ($indice as $nbr=>$size)
{
$x -= 30;
imagefilledellipse ($img,$x ,imagesy($img)-24,$size,$size,$black);
imagestring($img, 2 ,$x-5, imagesy($img)-15, $nbr, $black);
}
}
@imagepng($img,'cache/map.png');
}
}
}
if (mysql_error() !== '')
imagestring($img, 3 ,2, 10, 'Erreur SQL: '. mysql_error(), $black);
imagepng($img);
}
else
readfile('cache/map.png');
?>
Conclusion
Note: Les pays affichés sur l'image sont en code 2 lettres, il est possible d'afficher le plein nom en modifiant quelques peu la source mais je trouvais ça beaucoup moin esthetique :P .
Questions pour les experts: Est-ce que ce serait mieu de charger la liste complete des coordonées par pays et mettre ça dans un array, ou la requête imbriqué c'est mieu ? Parce que j'hésite beaucoup...
Historique
- 06 mars 2008 21:38:56 :
- Un oubli
- 06 mars 2008 21:44:50 :
- Ajout d'une question après relecture du code
- 07 mars 2008 00:27:22 :
- Ajout d'un indice de taille parametrable
- 07 mars 2008 09:56:49 :
- La capture a déconnée..
- 07 mars 2008 09:59:13 :
- La capture a déconnée..
- 07 mars 2008 11:02:20 :
- On garde juste les visites par ip, pas la liste complête des ips. Ajout de vérification si la personne passe par un proxy.
- 07 mars 2008 11:59:40 :
- Zip mal passe, decidement konqueror m'aime pas :(
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
l'IP des visiteurs d'un blog [ par shigure ]
Je voudrais enregistrer l'IP des visiteurs de mon blog.Mon blog est sur 20six.Pour l'enregistrement des données, soit vers un fichier *.txt sur un ftp
probleme update et delete [ par blinix123 ]
Bonjour à tous, alors voila, j'ai un script qui me permet de compter le nombre de visiteurs totale et le nombre de visiteurs en ligne, or bien evidemm
Connaître l'IP des visiteurs [ par bigcheek ]
Bonjour à tous,Je suis assez débutant en php et je souhaiterai connaître l'adresse ip des personnes visitant une certaine page de mon site.Je me suis
Proposer des compteurs à mes visiteurs ! [ par skaterboss2000 ]
Salut tt le monde !Bon, comme sur certain site (http://www.discompteur.com par exemple) je voudrais proposer à mes visiteurs de créer leur compteur te
comment connaître et mémoriser l'adresse IP des visiteurs de mo, site [ par fouque ]
rebonjour, je voudrais connaître et mettre dans un fichier les adresses IP des visiteurs de mon site. je suis un novice , avez-vous un code en html o
enregistrer l'IP des visiteurs de son site [ par jeanclod13 ]
Bonjour à tous, J’ai créé un site sur ma copropriété avec une zone réservée aux copropriétaires pour y accéder pour ceux qui le souhaitent chacun a u
Informations de vos visiteurs par email [ par bigrat ]
[b]Recevoir les informations des personnes qui passe sur votre site web.[/b] [code=php]<? $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; $user = $_SERVER["
Compteurs de visiteurs [ par Abousalimata ]
salut je suis à la quête d'un compteur de visiteurs avec le nombre de connectés en ligne et le record et si possible le total de tous les visiteurs u
Mettre en couleur du texte sur une page PHP. [ par Leo_Robotic_Passion ]
Bonjours a tous ^^ Je viens solliciter votre aide pour une petite modification sur un plugin dotclear! J'aimerais mettre en couleur un texte sur une
FERank - Mesure d'audience professionnelle [ par amo 2a ]
Bonjour, Etant en phase finale de développement je me permet de vous présenter notre outils d'analyse statistique. (Si je ne me trouve pas dans la bo
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|