begin process at 2012 02 14 02:19:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > GÉOLOCALISATION DE VOS VISITEURS (REVISÉ)

GÉOLOCALISATION DE VOS VISITEURS (REVISÉ)


 Information sur la source

Note :
9,2 / 10 - par 5 personnes
9,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :geolocalisation, visiteurs, compteurs, ip Niveau :Débutant Date de création :06/03/2008 Date de mise à jour :07/03/2008 11:59:40 Vu / téléchargé :15 238 / 1 111

Auteur : yoman64

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

Source avec Zip CLASSE : GESTION D'UTILISATEURS
Source avec Zip RÉCUPERER LES INFOS D'UN SERVEUR DE JEUX (BEAUCOUP DE JEUX S...
AJOUTER UN UTILISATEUR SUR UN SERVEUR FTP FILEZILLA
Source avec Zip PORTAIL DE PROGRAMMATION SANS MYSQL
ENREGISTRER LE IP DE CHAQUE VISITEUR

 Sources de la même categorie

Source avec Zip Source avec une capture CAMEMBERT BD par dardelphi
Source avec une capture AMÉLIORATION : CAMEMBERT par asphator
GESTION DE COULEUR par manuche
Source avec Zip NAVIGATOR (+CSSDETECTOR) par xXVoxPopuliXx
COMMENT, AVEC GD, DESSINER UN RECTANGLE TRANSPARENT PLEIN AV... par Rainbow

 Sources en rapport avec celle ci

Source avec Zip GEO-LOCALISATION (CONTINENT) par TheWeasel47
Source avec Zip SAVOIR LE PAYS DU VISITEUR par bloom1
Source avec Zip Source avec une capture STATS FAI par ImmortalPC
Source avec Zip Source avec une capture SAVOIR LE FOURNISSEUR D'ACCÈS INTERNET (FAI) DU VISITEUR par ImmortalPC
FICHIERS LOG, STATS, TRACES DU PASSAGE DES VISITEURS SUR UN ... par gergalp

Commentaires et avis

Commentaire de codefalse le 06/03/2008 23:51:56 administrateur CS 8/10

ca m'a l'air vraiment sympa, tout comme le code de nlion au passage :) Mais avec la gestion des erreurs en plus et une allègement du code (:

J'aime bien l'indication du nombre de personnes, c'est un plus que ne proposais pas nlion. Mais est-ce que tu vérifie que la personne ne rafraichis pas l'image ? (se faire compter plusieurs fois ?)

Perso je rajouterai l'indice des tailles (faire que tel diametre corresponde entre x et y personnes) afin d'éviter un rond trop gros par la suite :p

Nikel ! 8/10
On va bientot pouvoir concurrencer google ... hum

Commentaire de yoman64 le 07/03/2008 00:26:07

Salut,

En fait index.php ne compte pas les visites, elle ne fait qu'afficher la carte (qui est mise en cache, donc pas de génération inutile).

Ensuite pour le compteur de visites "visits.php" il crée une session pour éviter les doublons évidement :) Toute manière le champs "ip" est unique dans la base mysql.
Pour l'idée de l'indice de taille j'y avais pensé, j'ai eu un coup de paresse :P, je vais corriger ça tout de suite....voila c'est fait :)

Commentaire de neo2k2 le 07/03/2008 09:29:24

Bravo, je trouve ton code vraiment sympa.

Comme je l'ai signalé pour ls source de nlion, je t'invite à rajouter des informations sympas du genre:
- marquer plus distinctement l'emplacement du visiteur
- afficher les informations du visiteur dans un tableau (ip, pays, ville, etc.)

Un exemple que je trouve sympa: http://www.geoiptool.com/

Commentaire de codefalse le 07/03/2008 09:34:54 administrateur CS

Moi jvou'l dit, on va finir par concurrencer Google ;)

Commentaire de nlion le 07/03/2008 09:54:42 9/10

Motivé en effet ! J'ai chargé mon fichier avant-hier non ?

Pour "garder seulement le nombre d'entrés par Pays, et de ne pas garder une liste complete des IP accélererait beaucoup le traitement puisqu'on aurait que deux requêtes", je crois que c'est indispensable voir obligatoire. + de 1000 visites > + 15 s de chargement. Sauf si c'est pour un site avec peu de visites, on peut utiliser que les ips.

Une option qui est sympa, c'est de pouvoir mettre sa propre carte ;) (plus grande ou plus petite, ou une autre image). Pour mettre une autre image, il faut pouvoir redéfinir des nouvelles coordonnées pour chaque pays. J'avais mis cette option sur mon script (si tu veux t'en inspirer. Cette partie je l'ai faite très rapidement car je pensais m'en servir qu'une foie pour définir les emplacements sur l'image, donc il faut pas être trop critique lol). Les saisir toutes à la main y'en a pour beaucoup trop de temps.
ex: http://nlion.free.fr/IPsGEO/functions/UpdateCountrysPositions.php
De plus sur ma table des coordonnées des pays, il faut savoir qu'il manque des pays.

Mon code était un peu long c'est vrais. Tu m'as devancé ;) Je n'ai pas eu le temps de me pencher sur mon script depuis. C'est pas plus mal la preuve tu as développé un nouveau script.

En tout cas je suis très content d'avoir fournis ma source. Certains on été motivés pour faire quelque chose ;) Et peu de scripts proposent une localisation sur une carte sur phpcs.  J'en est trouvé un quand même depuis qui a eu quelques idées communes avant.  http://www.phpcs.com/codes/MAP-AVEC-TOUS-PAYS_39839.aspx Je n'ai pas essayé son script, mais apriori d'aspect c'est un peu similaire.

Bonne continuation !

PS : je met un 9 car ce script mérite de durée et d'évoluer encore. Pas 10 car j'ai donné l'idée ;)

Commentaire de twisteurwin le 07/03/2008 22:38:10

Yop NLION !
De passage par là je te passe le bonjour ça fait un bail dis donc toi lol (On a un peu bossé ensemble sur CRV si tu te souvient^^)
Joli script en tout cas et déjà optimisé (yoman64 quelle rapidité, chapeau !) ça a tout d'une belle source utile en tout cas !
Bon je retourne dans mon débug de script, j'ai deux mots à leur dire alors bon courage pour la suite !
+++ all


Commentaire de bezzaz le 23/03/2008 12:48:46

Bonjour,

Bravo, ton code est vraiment sympa.

Mais j'ai une question comme ça ! Est ce que on peut faire dans le même principe une carte qui affiche des points (importation/exportation du pétrole par exemple) sur les pays importatrice, avec le diamètre du point qui change par rapport à la quantité importer ! ??

Commentaire de GillesWebmaster le 27/03/2008 09:26:15 10/10

Bravo! ça c'est du code!
Excellentes idées!!!

Commentaire de TheWeasel47 le 21/04/2008 16:53:49 10/10

Balaise! je reconnais. 10/10

Commentaire de cadavor le 01/05/2008 00:10:19 9/10

Bonjour,

Je trouve cette source vraiment génial mais est-il possible d'avoir la liste des pays dans des fichiers plutôt que en base de donnée?
Je sais que certains scripts utilisent des fichiers...

Au lieu d'avoir des rond pour représenter le nombre de visiteur des pays pourquoi ne pas colorier le pays suivant une échelle (bleu à rouge par exemple) avec des détails au survol du pays?

Commentaire de GillesWebmaster le 01/05/2008 11:23:58

Bonjour,
Ce serai une bonne idée mais; il faudrait s'amuser à définir toutes les coordonnées des bordures des pays!!!
Mais si vous êtes motivés: il y a cette source qui est géniale: http://www.phpcs.com/code.aspx?ID=46344
Et pour faire un changement de texte au passage de la souris, il faudrait faire du GIF.
Maintenant que j'y pense, si on utilisait du SVG, sorte de XML, (telle que http://upload.wikimedia.org/wikipedia/commons/4/4d/BlankMap-World.svg) mais bonjour la compatibilité...
Bonne journée...

Commentaire de cadavor le 01/05/2008 12:17:42

Bonjour,
Il est possible en html de faire des liens sur des zones d'image (je ne me rappelle plus le nom du système par contre) je pensais à ça avec un petit script javascript (genre overlib) pour afficher une petite boite au passage de la souris sur le lien (fictif) de la zone.
Sinon un coup de flash...

Mais effectivement la source que tu mentionnes est excellente!!! Je ne connaissait pas et c'est plutôt puissant.

Pour les coordonnées des pays ça doit se trouver sur la toile...

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales