PHP  »  Articoli  »  Soluzioni in PHP 

Contare gli utenti online con PHP

di: Claudio Garau     29 Maggio 2009

I file dell'applicazione

Un volta creato e strutturato il database, il prossimo passaggio sarà quello di creare un semplice file di configurazione con i parametri necessari per la connessione al DBMS e per la selezione del database; per far questo sarà possibile definire una classe, come quella descritta nell'esempio seguente, che potrà essere salvata in un file config.php per l'inclusione:

<?php
class MySQL
{
 function MySQL()
 {
 # hostname di MySQL
  $this->host = "localhost"; 
 # nome utente per la connessione
  $this->user = "username"; 
 # password dell'utente
  $this->pass = "password";
 # nome del database
  $this->data = "statistiche"; 
 # connessione al DBMS
  $this->link = mysql_connect($this->host, $this->user, $this->pass);
 # selezione del database
  mysql_select_db($this->data);
 }
}
# istanza della classe
$data = new MySQL();
?>

Fatto questo si potrà passare alla fase che concerne la creazione del cuore dell'applicazione: il file che fungerà da contatore, da visualizzatore e da gestore degli utenti.

<?php
# inizializzazione della sessione
@session_start();
# creazione dell'identificatore di sessione
$sessione=@session_id();
# memorizzazione in variabile del momento di connessione
$time=@time();
# definizione dell'intervallo di tempo valido per l'utente connesso
$intervallo=$time-300;

# inclusione del file di configurazione  
@require "config.php";

# confronto tra identificatore di sessione e dati in tabella
$sql_confronto="SELECT * FROM utenti_on_line WHERE sessione='$sessione'";
$res_confronto=@mysql_query($sql_confronto) or die(mysql_error());

# se l'identificatore non è presente viene creato un nuovo record
if(@mysql_num_rows($res_confronto)==0){
                $sql_inserimento="INSERT INTO utenti_on_line(sessione, timestamp)VALUES('$sessione', '$time')";
                $res_inserimento=@mysql_query($sql_inserimento) or die(mysql_error());
        }
else {
        # se l'identificatore è già presente viene aggiornato il 
                # valore relativo al momento di connessione
         $sql_aggiornamento="UPDATE utenti_on_line SET timestamp='$time' WHERE sessione = '$sessione'";
        $res_aggiornamento=@mysql_query($sql_aggiornamento) or die(mysql_error());
        }

# estrazione dei record presenti in tabella per il conteggio 
$sql_conteggio="SELECT id FROM utenti_on_line";
$res_conteggio=@mysql_query($sql_conteggio) or die(mysql_error());
$conteggio=@mysql_num_rows($res_conteggio);

# stampa a video del conteggio
echo "Utenti online: " . $conteggio; 
 
# cancellazione dei record obsoleti 
$sql_cancellazione="DELETE FROM utenti_on_line WHERE timestamp<$intervallo";
$res_cancellazione=@mysql_query($sql_cancellazione) or die(mysql_error());

# chiusura della connessione 
@mysql_close();
?>

In pratica l'applicazione registra un identificatore per ogni sessione inizializzata dall'accesso di un utente, se questo identificatore non è presente nella tabella viene aggiunto, se esso è invece già presente viene aggiornato il dato relativo al momento del suo accesso; nel caso in cui il momento di accesso di un utente sia inferiore al timestamp ottenuto sottraendo 5 minuti (300 secondi) dal risultato della funzione time(), il record corrispondente verrà eliminato considerando l'utente non più online.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti