begin process at 2012 02 12 19:29:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > COMPTEUR DE CONNECTÉS

COMPTEUR DE CONNECTÉS


 Information sur la source

Note :
7,96 / 10 - par 24 personnes
7,96 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & Internet Niveau :Débutant Date de création :09/07/2002 Date de mise à jour :02/02/2008 12:58:55 Vu :7 533

Auteur : Dean

Ecrire un message privé
Commentaire sur cette source (35)
Ajouter un commentaire et/ou une note

 Description

Ceci est un compteur de connectés (eh oui, encore un !).
Celui-ci récupère deux variables, l'une qui contient le nombre de connectés sur le site, et l'autre qui contient ceux de la page courante.
Ce script utilise MySQL (1 table est nécessaire avec 3 champs : Id utilisateur, heure et page visitée), mais vous n'aurez qu'à préciser vos coordonnées et il se charge du reste (création de la table).
Sinon, comme d'habitude, le temps pendant lequel l'utilisateur est considéré comme connecté est paramétrable (par défaut 5 minutes).

Le principal avantage de ce script est qu'il est très léger ! (supprimez les commentaires et vous verrez)

J'ai aussi inclus une fonction bonus, get_ip(), qui permet de connaître la vraie IP du client...

Voilà, c'est tout !

Source

  • <?php
  • /*****************************************************************************
  • * Compteur de connectés
  • * Copyright © 2002 Dean
  • *
  • * Contact : -
  • *
  • *****************************************************************************/
  • /*
  • * string get_ip()
  • * Retourne la vraie adresse IP du client, même si celui-ci est sous proxy
  • */
  • function get_ip()
  • {
  • if($_SERVER)
  • {
  • if($_SERVER['HTTP_X_FORWARDED_FOR'])
  • $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  • elseif($_SERVER['HTTP_CLIENT_IP'])
  • $ip = $_SERVER['HTTP_CLIENT_IP'];
  • else
  • $ip = $_SERVER['REMOTE_ADDR'];
  • }
  • else
  • {
  • if(getenv('HTTP_X_FORWARDED_FOR'))
  • $ip = getenv('HTTP_X_FORWARDED_FOR');
  • elseif(getenv('HTTP_CLIENT_IP'))
  • $ip = getenv('HTTP_CLIENT_IP');
  • else
  • $ip = getenv( 'REMOTE_ADDR');
  • }
  • return $ip;
  • }
  • // Définit un identifiant pour le client (ici son adresse IP)
  • $client_id = get_ip();
  • // Définit l'intervalle de temps pendant lequel le client est considéré comme connecté (en secondes)
  • $client_delay = 300;
  • // Récupère l'heure courante sous la forme d'un timestamp Unix
  • $time = time();
  • // Ouvre une connection à MySQL et sélectionne la base
  • mysql_select_db("database", mysql_connect("localhost", "root", ""));
  • // Supprime de la table les entrées invalides par rapport à l'heure courante
  • if(!mysql_query("DELETE FROM clients WHERE client_time_request < $time - $client_delay"))
  • // En cas d'échec, crée la table
  • mysql_query("CREATE table clients(client_id VARCHAR(64) NOT NULL, client_location VARCHAR(128) NOT NULL, client_time_request INT NOT NULL)");
  • // Insère l'adresse IP du client et la page où il se trouve
  • mysql_query("INSERT INTO clients VALUES('$client_id', '$REQUEST_URI', '$time')");
  • // Définit les clients connectés sur la page en cours
  • $current_num_clients = mysql_num_rows(mysql_query("SELECT DISTINCT client_id FROM clients WHERE client_location = '$REQUEST_URI'"));
  • // Définit les clients connectés sur le site
  • $global_num_clients = mysql_num_rows(mysql_query("SELECT DISTINCT client_id FROM clients"));
  • // Ferme la connection à MySQL
  • mysql_close();
  • ?>
<?php
/*****************************************************************************
 *                                Compteur de connectés
 *                     Copyright © 2002 Dean
 *
 *                       Contact : -
 *
 *****************************************************************************/

/*
 *      string get_ip()
 *      Retourne la vraie adresse IP du client, même si celui-ci est sous proxy
 */
function get_ip()
{
    if($_SERVER)
    {
        if($_SERVER['HTTP_X_FORWARDED_FOR'])
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        elseif($_SERVER['HTTP_CLIENT_IP'])
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        else
            $ip = $_SERVER['REMOTE_ADDR'];
    }
    else
    {
        if(getenv('HTTP_X_FORWARDED_FOR'))
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        elseif(getenv('HTTP_CLIENT_IP'))
            $ip = getenv('HTTP_CLIENT_IP');
        else
            $ip = getenv( 'REMOTE_ADDR');
    }

    return $ip;
}

// Définit un identifiant pour le client (ici son adresse IP)
$client_id = get_ip();

// Définit l'intervalle de temps pendant lequel le client est considéré comme connecté (en secondes)
$client_delay = 300;

// Récupère l'heure courante sous la forme d'un timestamp Unix
$time = time();

// Ouvre une connection à MySQL et sélectionne la base
mysql_select_db("database", mysql_connect("localhost", "root", ""));

// Supprime de la table les entrées invalides par rapport à l'heure courante
if(!mysql_query("DELETE FROM clients WHERE client_time_request < $time - $client_delay"))

// En cas d'échec, crée la table
mysql_query("CREATE table clients(client_id VARCHAR(64) NOT NULL, client_location VARCHAR(128) NOT NULL, client_time_request INT NOT NULL)");

// Insère l'adresse IP du client et la page où il se trouve
mysql_query("INSERT INTO clients VALUES('$client_id', '$REQUEST_URI', '$time')");

// Définit les clients connectés sur la page en cours
$current_num_clients = mysql_num_rows(mysql_query("SELECT DISTINCT client_id FROM clients WHERE client_location = '$REQUEST_URI'"));

// Définit les clients connectés sur le site
$global_num_clients = mysql_num_rows(mysql_query("SELECT DISTINCT client_id FROM clients"));

// Ferme la connection à MySQL
mysql_close();

?> 

 Conclusion

Je ne pense pas qu'il y ait de problèmes avc ce script, quoi qu'il faut peut-être la version 4.1 (ou plus) de PHP pour faire fonctionner get_ip(). Sinon utilisez $REMOTE_ADDR pour la valeur de client_id.

Ah oui, j'allais oublier :

Pour afficher les connectés, il faut faire appel aux variables $global_num_clients et $current_num_clients.

Si vous avez des questions ou des remarques , n'hésitez pas à ajouter des commentaires.


 Historique

20 juillet 2006 09:53:53 :
Suppression de mon mail.
02 février 2008 12:58:56 :
J'ai mis mon pseudo pour l'auteur de la source.

 Sources du même auteur

COMPTEUR DE CLICS
RENOMMAGE MASSIF DE FICHIERS
NOMBRE DE FICHIERS DANS UN RÉPERTOIRE
INSTALLER PHP-GTK SOUS EASYPHP
Source avec une capture OBTENIR LES ADRESSES E-MAIL D'UN TEXTE

 Sources de la même categorie

Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj
Source avec Zip MYGGL GOOGLE API CLASS FOR BEGINERZ par lezj
CLASSE WIKILOC par aKheNathOn

Commentaires et avis

Commentaire de Dean le 13/07/2002 23:01:50

1/10 ?
Merci beaucoup, je vois qu'il en a qui apprécient !
Ce serait encore mieux d'avoir une justification écrite...

Commentaire de g0belin le 22/07/2002 07:28:30

t'inkiete pas c'est surement des jaloux

Commentaire de g0belin le 22/07/2002 07:37:15

juste tu devrai mettre la structure de la base SQL

Commentaire de Dean le 22/07/2002 12:28:45

OK, je fais les modifs tout de suite.

Commentaire de grdscarabee le 25/07/2002 00:01:01

Bravo, excellent travail. te laisse pas bouffer, ya des trousduc partout. J'adorerais pouvoir pondre un script come ça. ;)

Commentaire de Kikounet le 07/04/2003 19:27:57

Clair... Exelent ton script =) merci bcp pour ca... Ca va pas mal m'aider lol =)

Commentaire de lumesh le 12/04/2003 12:54:30

en fait ce que je trouve exelent c que par rapport au autres scripts du genre, bah le tiens si tu vire la creation auto de la table ainsi que tous les commentaires il ne reste que 7 lignes !!!
le pire c'est que ca marche aussi bien que les autres scripts (enfin ceux qui marchent lol).

En gros c'est parfait pour implementer dans son site woueb !

Commentaire de relizwork le 12/04/2003 15:53:27

merci beaucoup ton script est vraiment super , gg ++ all

Commentaire de Dean le 13/04/2003 01:07:34

Eh bien c'est sympa tous ces messages ! Merci à vous aussi !

Commentaire de i0Lo le 12/05/2003 11:38:54

mmmmm trés sympa ca m'a évité de me prendre la tête dans des recherches pas possibles lol
Trés bonne source allez zou un 10/10

Commentaire de mathieumg le 29/06/2003 13:43:13

Très bien !

Commentaire de bricethenetman le 20/07/2003 14:05:11

Je suis un newbie mais je dois dire ke ce code me parait génial. C'est des script kom ca ki donne envie de progresser. merci. Ce script mérite au moins 10/10.

Commentaire de HenvimaL le 14/08/2003 16:37:44

moi je suis un debutant dans le php et je ne le comprend pas tres bien, seule probleme (ne vous moquez pas), j aimerai savoir ou le mettre cette chose, dans la index.php, marche pas :S, et mysql  oula, j suis chez free si on peu me donner un petit conseil

Commentaire de Dean le 14/08/2003 17:05:07

Bonjour,

Tu peux inclure ce code dans une page "live_counter.php" que tu inclus dans ton index via include() ou require().
Ensuite, tu n'as plus qu'à récupérer les variables ($num_clients...) dont tu veux te servir.

Pour la base MySQL, si tu es chez Free il faut d'abord l'activer (voir www.free.fr).
Après il te suffit de paramétrer la ligne :

mysql_select_db("database", mysql_connect("localhost", "root", ""));

Avec le serveur ("sql.free.fr"), pour le nom d'utilisateur et le mot de passe ce sont les mêmes que pour l'accès FTP.

Commentaire de HenvimaL le 14/08/2003 17:16:38

oui oui j ai activé la base mysql chez free je suis dessus mais je comprens rien, donc dans mon index.php je mes &lt;?php include('live_counter.php") ?&gt; ensuite  j mes le php etc... mais ca sert a quoi
mysql_select_db("database", mysql_connect("localhost", "root", ""));
et surtout j le mes ou ? uHu :p

Commentaire de bricethenetman le 14/08/2003 18:14:24

mysql_select_db() est une fonction php qui va sélectionner une base de donnée afin que tu puisse la manipuler(si tu ne défini pas de bdd php ne saura pas executer tes requetes). mysql_connect sert à te connecter à la bdd choisi si les parametre host, user et password sont bons. Mais le mieux pour toi ca serais d'aller sur des cours de php en ligne comme phpdébutant

Commentaire de bricethenetman le 14/08/2003 18:15:27

sinon tu peut toujours aller sur nexen.net ou sur le site officiel de php pour completéer tes connaissance en programmation web.

Commentaire de HenvimaL le 14/08/2003 21:13:03

oué ok merci :D

Commentaire de HenvimaL le 14/08/2003 22:48:35

voila donc maintenant j ai creer ma db et mes 3 champs, mais que faire avec ?

Commentaire de bricethenetman le 14/08/2003 22:55:02

ben je c pas g pas tester ce script en plus moi aussi je suis newbi(g un mois et demi de php) mais je pense ke si t'as tout bien suivi  il ne te reste plus rien a faire sauf si le script contient des erreurs

Commentaire de HenvimaL le 14/08/2003 22:58:50

ahah voila j ai compris le truc, mais encore un probleme j ai entré le code en php, config etc... et en haut de ma page il ecrit

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in index.php on line 49

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in index.php on line 52
voir http://henvimal.a.free.Fr

Commentaire de HenvimaL le 14/08/2003 23:00:40

comme d habitude je suis un chanceu C pil la mauvais ligne !

Commentaire de bricethenetman le 14/08/2003 23:37:11

Vérifie si t'as pas oublié un ";" quelquepart. Sinon tu peux m'envoyer t'as source par email je peux y jeter un coup d'oeil pour voir si je peux t'aider.

Commentaire de HenvimaL le 14/08/2003 23:51:18

bon b1 en tou cas GG la carrotte tu as reussi a faire croire ke tu etais un dieu du php alors ke..; GG la carote, tu dois me comprend !

Commentaire de Dean le 15/08/2003 00:38:32

Merci pour le spam (11 nouveaux messages...) ;-).

Sinon pour ton problème HenvimaL, je tiens à préciser que tu n'as pas besoin de créer la table SQL manuellement, puisque cela est géré par le script. Donc vire ta table et réessaie :-).

Commentaire de Yoteco le 09/06/2004 08:04:09

Salut,

Je suis sous un proxy et il y a environ 20 pc derrière... mais ils ont tous la même ip quand il se connecte! C'est embêtant :-( tu ne saurais pas pk?

Commentaire de hardman566 le 01/09/2004 13:45:44

Bravo pour ton script!

Tres clair! Simple d'installation! Rapide!...parfait à mon goût et pour mes besoins.

Merci.

Commentaire de chapodepay le 22/11/2005 15:39:49

bonjour la faille -_-
celui ki met se script sur son site s'expose a de gros souci...

chapodepay
www.horslimite.net

Commentaire de kankrelune le 24/12/2005 04:51:30

J'adore les mecs qui viennent se dandiner en disant "bonjour la faille" mais qui ne sont pas capable de dire comment la résoudre pour éviter aux utilisateurs du script en question d'être touchés... dans d'autre cas on appel ça "non assistance à personne en danger"... pffffffffff... lamentable... .. .

Bon pour complèter il faudrait parser le $REQUEST_URI car sinon effectivement vous vous exposez à des gros soucis...

trim(htmlspecialchars(addslashes($_SERVER['REQUEST_URI'])));

devrait suffire... .. .

@ tchaOo°

Commentaire de peoplehard le 20/01/2007 18:46:57

Merci pour ce super script :)

Pour la structures mysql:
CREATE TABLE `clients` (
  `client_id` varchar(64) NOT NULL default '',
  `client_location` varchar(128) NOT NULL default '',
  `client_time_request` int(11) NOT NULL default '0',
  PRIMARY KEY  (`client_id`,`client_location`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Commentaire de frakosun le 20/03/2008 10:43:59

pour la faille un 'mysql_real_escape_string($_SERVER['REQUEST_URI'])' devrait suffire, pas besoin d'en mettre 12 tonne ;)

Commentaire de Dean le 20/03/2008 18:36:47

>> pour la faille un 'mysql_real_escape_string($_SERVER['REQUEST_URI'])' devrait suffire, pas besoin d'en mettre 12 tonne ;)

Merci, je me demandais justement si l'on pouvait "préparer" les requêtes SQL avec PHP (de façon sécurisée), cela répond à ma question.

Commentaire de frakosun le 21/03/2008 00:03:04

En fait il existe plusieurs solutions plus ou moins 'correctes' on va dire.
Par ex. la méthode de kankrelune donné plus haut fonctionne, mais pourquoi faire compliqué (htmlspecialchars + addslashes) alors que mysq_real_escape_string est une fonction sql donc 100% adaptée?

Il faut l'utiliser avant toute interaction avec la bdd (select, update & co.) sans exception ;)

Par contre si les "magic quotes" sont activés sur le serveur cela va échapper 2 fois certains caractères comme les ' ou " donc c'est pas top. Il existe une fonction qui s'occupe d'y remédier, qui va vérifier si les magic quotes sont sur ON ou OFF et qui va agir en conséquence (par contre désolé je ne l'utilise pas donc je ne l'ai pas...).

Pis pour peaufiner avec une bonne dose de parano pour l'affichage un 'int($current_num_clients)' ne peut pas faire de mal :P

Commentaire de Arnauti le 05/07/2008 11:09:02 10/10

Tres joli script :)

Commentaire de cymoud le 07/08/2008 23:10:55 1/10

Hey les gens, réagissez, il y a au moins 2 failles de sécurité là déjà ! En tout cas je n'en ai vue que 2 pour l'instant.
La première concerne l'injection SQL, heureusement que frakosun a proposé une solution mais manque de pot, Dean n'a pas jugé utile de le corriger dans la source, donc plein de gens continueront à trouer leur sécurité en copiant cette source.
La deuxième est que même si le script vérifie bien la cohérence de l'adresse IP donnée en HTTP_X_FORWARDED_FOR ou en HTTP_CLIENT_IP (ce qui n'est déjà pas le cas), je peux quand même générer un petit script qui enverra une fausse IP aléatoire dans l'en-tête de la requête HTTP et donc faire exploser le compteur de chez moi même sans aucun proxy.

 Ajouter un commentaire




Nos sponsors


Sondage...

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 : 1,326 sec (3)

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