Luca Bigon
a- a+

Contatore di accessi senza database

Molti webmaster hanno la necessità di tenere sottocontrollo il numero di accessi al proprio sito; per questoesistono moltissimi servizi, alcuni gratuiti altri apagamento, che permettono per l’appunto di teneretraccia del numero di visitatori in cambio di un linkall’home page del servizio.
Perché invece di appoggiarsi a un servizio esternonon usare un semplice script PHP che permetta di contare ilnumero di utenti che visitano il nostro sito? Non sarebbemale vero?

Quello che oggivi presento è una semplicissima funzione scritta inPHP che richiede in ingresso il navigatore (vedremo inseguito) e che restituisce il numero di utenti totali chehanno visitato il sito. Ecco il codice:

1.function contatoreVisite($dirFile) {# CONFIGURAZIONE# nome del file txt:$nomeFile = "conta.txt";# SCRIPT# apriamo il file con memorizzato il numero di accessi$file = @fopen($dirFile."/".$nomeFile ,"r+ ");# salviamo il contenuto del file$contatore = @fread($file, filesize($dirFile."/".$nomeFile));# chiudiamo il file precedentemente aperto@fclose($file);# incremento il contatore$contatore++;# apro il file per salvare il nuovo valore$file = fopen($dirFile."/".$nomeFile ,"w+ ");# salvo il valore all'interno del filefputs($file, $contatore);# chiudo il file apertofclose($file);# ritorno il valore del contatore incrementatoreturn $contatore;}

Come funziona?
Semplice. Nella prima riga della funzione assegniamo allavariabile nomeFile il valore conta.txt. Successivamenteuseremo questo file per leggere e salvare il numero di utentiche visitano il sito.
Nella seconda riga di codice troviamo la funzione fopen()che permette di aprire il file (nel nostro caso conta.txt) esuccessivamente, nella terza riga, di salvare il contenutonella variabile contatore; dopo di che chiudiamo ilcollegamento con il file conta.txt.
Ora sommiamo 1 alla variabile contatore usandol’operatore di incremento ++.
Non ci resta che salvare la variabile contatore nel fileconta.txt; per fare ciò è necessario aprire ilfile con i permessi di scrittura (w+), con la funzionefputs() sovrascriviamo il vecchio valore con quello nuovo epoi restituiamo il valore di $contatore alla funzione.

Vediamo ora a cosa server la variabile dirFile; supponiamodi avere questa struttura nel nostro sito:

/php
/php/index.php
index.php
funzioni.php
conta.txt

In questo caso di studio la nostra funzione è statasalvata nel file funzioni.php; successivamente questo fileviene incluso sia in index.php che nel file index.php che sitrova nella cartella /php. Ora accediamo alla paginaindex.php nella root del nostro sito per 9 volte. Giustamenteil nostro contatore ci segnala il numero esatto di visite.Ora provate ad entrare nella cartella /php e a eseguire ilfile index.php. Alla prima esecuzione vi viene restituito ilvalore 1 vero? Il motivo è che nella cartella /php nonesiste nessun file conta.txt. Se fare 5 reflash della paginavi accorgerete che il numero totale di visite è pari a5. Ora facendo due conti, 9 visite più 5 dovrebbe dare14. Andate nella root del sito ed eseguite index.php! Lapagina vi restituirà sicuramente 10! Ora se entratenella cartella /php vi accorgerete che il PHP ha creato unnuovo file conta.txt. In poche parole eseguendo il fileindex.php nella cartella /php, la funzione ha cercato il fileconta.txt nella stessa cartella dove viene eseguito lo scripte non trovandolo ne ha creato uno.
Per ovviare a questo problema si è scelto di passarealla funzione il livello in cui si trova il file conta.txt.In questo caso nel file index.php che si trova nella root delsito, richiameremo la funzione in questo modo:
echo contatoreVisite(“.”);
mentre nel file index.php che si trova nella cartella /phprichiameremo la funzione in questo modo:
contatoreVisite(“..”);