|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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-VOTRE-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
Sources en rapport avec celle ci
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
Adresse IP [ par MiTcH37 ]
bijour,j'ai un visiteur sur mon site qui change tout le temps d'IP :64.68.81.14564.68.81.14064.68.81.14164.68.81.16764.68.81.19464.68.81.15164.68.81.1
Image et Ip [ par ooosakilo ]
Bonjour, ca fait quelque temps que je cherche et je trouve pas.Alors je voudrais afficher l'ip, l'acces internet, le navigateur internet et l'OS d'une
compteur de nombre de visiteurs connecté [ par developvbdebut ]
Bonjour tout le mondeQuel qu'un a ti'l déja utilisé la source de antidoteVoici le nom de la source ce dessou:COMPTEUR DE VISITEURS CONNECTÉS EN TEMPS
comment empêcher une poste à accéder à mon site connaissant son IP [ par sahliali ]
Je vient de créer un site web intranet et je veut réaliser une table dont laquelle j'enregistre tous les traces d'un visiteur parmis ces traces son IP
Sondage, reconnaissance IP... [ par jojomillenium ]
Hello!Voila ma question. Je propose un sondage sur mon site, et j'aimerai interdire le vote multiple...J'ai alors fait le test de l'adresse IP enregis
Vraie adresse IP [ par Jarod1980 ]
Bonjour,J'ai une petite question. Je voudrais enregistrer l'adresse IP de mes visiteurs. J'ai vu quelques scripts sur phpcs permettant de faire ceci.
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|