Compteur de connectés

Contenu du snippet

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 / Exemple :


<?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.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.