Script Visitatori OnLine:
Questo script si articola in due pagine:
Navigatori presenti nelle due pagine dell'articolo user online:
INFO:
Lo script si articola in due punti fondamentali, ossia la creazione della tabella dove
confronteremo i dati, e la creazione di una nuova pagina (dove inseriremo lo script)
che poi sarà inclusa in tutte le pagine da controllare.
Tabella MySql:
Per prima cosa dobbiamo creare la tabella dove inseriremo i dati. Per farlo basta inserire questa
query all'interno di PhpMyAdmin:
CREATE TABLE `useronline` (
`id` varchar(100) NOT NULL default '0',
`data` int(100) NOT NULL default '0',
PRIMARY KEY (`id`)
);
INSERT INTO `useronline` (`id`, `data`) VALUES (1, 0);
Come Fare?
Entrate in PhpMyAdmin, cliccate sul nome del database (nello spazio a sinistra), cliccate sul
link
"SQL" (in alto), adesso copiate ed incollate il testo qua sopra nel form di esecuzione
query. Premete
"esegui".
Se la query è eseguita con successo vedrete un messaggio che lo notifica e la nuova tabella
nel lato sinistro.
ATTENZIONE alla punteggiatura durante il copia/incolla
Parametri query script:
Per uniformare lo script per ogni navigatore, abbiamo inserito i dati di connessione
al database in alcune variabili. Sono parametri che solo il webmaster conosce,
pertanto dovrete configurare le cinque righe successive con i vostri dati
di accesso al database.
$host="localhost";
$database="il-nome-del-tuo-database";
$user="il-tuo-user-database";
$password="la-tua-password-database";
$tabella="useronline";//il nome della tabella che abbiamo creato
NON COPIARE/INCOLLA, troverai queste righe nello script.
Script:
Per prima cosa dobbiamo creare un file con estensione
.php dove memorizzeremo il
nostro script (Per convenzione lo chiameremo
useronline.php).
Adesso dobbiamo copiare il codice sottostante ed incollarlo nel nostro file
useronline.php
N.B. Per chi non conosce le basi del php i segni
//
indicano un commento, e sono ininfluenti per lo svolgimento dello script, potete copiare/incollare
lo script così come lo vedete.
<?
$host="localhost";
$database="nome_del_tuo_database";
$user="user_per_accedere_al_database";
$password="password_per_accedere_al_database";
$tabella="useronline";
$linkdata=@mysql_connect($host,$user,$password);//riga parametri di collegamento database
//ricavo il codice ip e l'orario
$codip=$_SERVER['REMOTE_ADDR'];//estraggo il codice ip del navigatore
$tempo=time();//ricavo il timestamp, numero che identifica l'orario del momento
//adesso verifico se il codice ip è nella tabella oppure no
$ric=@mysql_db_query($database,"select data from ".$tabella." where id='".$codip."' ",$linkdata);
$numric=@mysql_num_rows($ric);
if($numric!=0){//se l'ip è nella tabella aggiorno l'orario
@mysql_db_query($database,"update ".$tabella." set data=".$tempo." where id='".$codip."' ",$linkdata);
}
else{//se l'ip non è nella tabella lo inserisco
@mysql_db_query($database,"insert into ".$tabella."(id, data) values ('".$codip."','".$tempo."')",$linkdata);
//se in questo punto aumentiamo di 1 il numero di data dove id=1 (la prima riga della tabella) avremo anche un contatore di accessi del sito
}
//adesso elimino tutte le righe che eccedono nella differenza tempo
$difdata=$tempo-120;//120 sono secondi, in pratica elimino tutti gli ip che non si collegano ad una pagina da almeno due minuti
$ric2=@mysql_db_query($database,"select data from ".$tabella." where id!=1 ",$linkdata);
$veric2=@mysql_num_rows($ric2);
$numlinee=0;
while ($numlinee<$veric2){
$data=@mysql_result($ric2,$numlinee,"data");
if($data<$difdata){
@mysql_db_query($database," delete from ".$tabella." where data=".$data." ",$linkdata);
}
$numlinee++;
}
//tabella dove vedremo in numero dei navigatori online:
$fine=@mysql_db_query($database,"select * from ".$tabella." where id!=1 ",$linkdata);
$online=@mysql_num_rows($fine);
echo"<table><tr><td>Online : ".$online."</td></tr></table>";
//selezioniamo un numero casuale (per non stressare il database) che ottimizza la tabella, in alcune condizioni per ottimizzare la tabella occorre circa un secondo, pertanto cercate di ottimizzarla unatantum
$ran=rand(0,5);
if($ran==5){
@mysql_query("OPTIMIZE TABLE ".$tabella." ");
}
?>
Per allungare o diminuire la differenza tempo stimato di permanenza in una pagina è necessario
modificare il numero della variabile
$difdata (nello script a 120 secondi).
Se aumentiamo il valore prenderemo più navigatori, al contrario diminuiranno.
Inclusione:
Adesso che abbiamo creato il nostro script lo dobbiamo mettere in uso.
Per farlo dobbiamo includere la pagina dello script (per noi chiamata
useronline.php) in
ogni pagina del sito da controllare.
Nelle pagine dove non includiamo lo script non vedremo la tabella con il numero, ma cosa
più importante
non potremo prendere nota degli utenti che vi stanno stanno navigando.
Pertanto suggeriamo di cancellare le righe finali (dove scriviamo la tabella) ma di inserire
ugualmente la pagina con lo script.
Per inserire la pagina è sufficente inserire questo codice nel punto esatto dove volete
visualizzare la tabella:
<?
@include("useronline.php");
?>
N.B.
il segno
@ è utilizzato per inserire un comando senza la
possibilità di vedere a video errori di tipo
warning.
Se non vedete il risultato dello script provate a togliere le chioccioline per vedere dov'è
segnalato l'errore (ma ricordate che anche i navigatori vedranno il messaggio).
Possibili errori:
Per descrivere lo script abbiamo inserito dei commenti (iniziano con
//) che risultano
su più righe per colpa dell'impaginazione del sito.
Tali righe devono stare su una sola riga!
Altrimenti vedrete a video il seguente errore:
Parse error: syntax error, unexpected T_STRING
in /.../.../.../vostrosito.it/.../useronline.php on line..
Limiti script:
Lo script in oggetto memorizza i codici
IP univochi del navigatore.
Questo script è solo un punto
di partenza per nuovi sviluppi, in effetti ha un limite molto grosso,
in pratica non riesce a
distinguere se un navigatore utilizza un codice IP pubblico di un proxi.
Visto le numerose offerte telefoniche non è da escludere che alcuni codici IP risultino
identici fra navigatori diversi.
Per ovviare a questo problema una soluzione potrebbe essere di inserire al posto del
codice IP una variabile numerica che identifica il navigatore tramite cookie o sessioni.