Nelle pagine del sito è stato motivato il perché è importante un contatore e ne sono stati esposti alcuni di varie tipologie. Con PHP ed altri linguaggi di programmazione lato server è possibile realizzare un proprio contatore per le statistiche al proprio sito Web. PHP ci permette di raccogliere tutte le informazioni che sono richieste al server ma non è in grado di sapere le proprietà del client, per esempio la risoluzione video. Le idee che verranno proposte cercheranno di ricorrere a molte semplificazioni per trattare inizialmente i problemi, però una volta che si arriva al risultato propongo quando vorrete di fare delle generalizzazioni (in alcuni casi si daranno delle basi su cui approfondire), che tanto più saranno spinte e tanto più permetteranno di avere un contatore avanzato.
Preme sottolineare che per quanto un contatore possa essere sofisticato tuttavia non deve violare la legge sulla privacy, per esempio creare profili per i visitatori, mentre invece saremmo interessati a dati aggregati che i contatori gratuiti non danno, per esempio qual è il giorno delle settimana che in media ha più visite, qual è la fascia oraria in cui ci sono più accessi, qual è il tempo di permanenza sul nostro sito web… Ma tutte queste implementazioni non verranno trattate in questa sede, ma ben fanno capire le vere potenzialità di un contatore con una complessa implementazione.
In primo luogo per semplicità si possono omettere di raccogliere queste ultime informazioni ed in prima istanza si può pensare di salvare i dati su file di testo (tuttavia a regime sarebbe meglio se si utilizzasse un database) poiché in alcuni casi potrebbero verificarsi dei conflitti quando un file associato ad una certa pagina viene scritto in maniera non esclusiva. Come ulteriore semplificazione iniziale non teniamo l'associazione tra la specifica pagina ed il numero di click ricevuti, ma si valutano il numero di click ricevuti dall'intero sito.
Quindi ad ogni pagina metteremo questo script (non propongo nessun punto in cui metterlo perché verrà sempre eseguito, faccio osservare che più è in cima alla pagina e più potrebbe trovare visitatori che altrimenti non verrebbero conteggiati se il server fallisse), cambiando oppotunamente il pathname:
<?php include ("http://x.y/contatore.php"); ?>
Mentre lo script contatore.php contiene questo codice:
<?php /////////// file contatore.php ///////////
// aggiorna il contatore con il nuovo click appena ricevuto
// notare l'uso dell'operatore di silence.
# pathname e nome del file del contatore
$file_cont = "/contatore.txt";
$click = @file_get_contents($file_cont);
if ($click == null) {
// il file era vuoto, lo si inizializza
$click = 0;
}
$click++;
@file_put_contents($file_cont, $click);
?>
Notare che è stata utilizzata la funzione file_get_contents() al posto di fopen(), soluzione altrettanto valida. Nel precedente script avremmo potuto utilizzare cURL per leggere più velocemente che con la funzione file_get_contents(), ma la modifica viene lasciata al lettore.
Osserviamo che questa impostazione estremamente semplice potrebbe portare ad errori, come già accennato precedentemente, quando almeno due visitatori accedono al sito perché entrambi vanno a modificare in scrittura lo stesso file sollevando il caso di una "scrittura sporca". Per evitare questo problema se volessimo continuare ad utilizzare un file di testo dovremmo ricorrere ad un mutex, oppure facendo scrivere in una cartella un numero di file pari al numero di click fatti. Inoltre in ognuno di questi file potrebbe contenere una serie di informazioni che ci permettano di costruire la serie di pagine scaricate associandole ad un'orario. Ma attenzione, prima di mettere in produzione un contatore di questo tipo è necessario creare almeno uno script che gestisca opportunamente i dati e cancelli i file vecchi altrimenti avremmo una cartella ingolfata di file. Inoltre dobbiamo ancora gestire il problema di come fare a scedulare questa attività.
Ci rendiamo conto che per un discreto numero di visite non è più possibile ricorrere al sistema dei file (basterebbero già soli due visitatori che contemporaneamente scarichino una pagina) mentre invece dovremo orientarci ai database essendo strutture di dati che consentono di gestire informazioni in parallelo. Tuttavia anche per i database occorre tenere presente che possono gestire un numero massimo di connessioni parallelamente, nel caso di Microsoft Access è di 15 limite che verrebbe ampiamente superato per un sito con una discreta fama. Un prodotto certamente migliore di Access è MySQL che aumenta il limite a 25, doverosa menzione anche per PostgreSQL.
La soluzione precedente funziona, però vorremmo fare una discriminazione tra gli utenti che hanno JavaScript abilitato, a cui possiamo estrarre anche le informazioni sulla risoluzione video, dagli altri a cui annoteremo che JavaScript è disabilitato.
L'ultima modifica alla pagina è del 05-03-2012
Hai un sito che non rende?
Prova la soluzione di qualità!
Per liberi professionisti, PMI
artigiani e commercianti.
Se non sei in Rete, od il sito è introvabile, richiedi un
preventivo gratuito.
La soluzione vincente ti sta già aspettando online.
:: SCONTO ROTTAMAZIONE SITI FLASH E "MI PIACE" ::
Si rottamano siti web in flash con nuovi basati sulla tecnologia XHTML e fogli di stile CSS usufruendo dello sconto di un terzo (33.33%) del costo normale purché di almeno 10 pagine XHTML ed esprimendo il "Mi Piace" alla pagina Facebook. Un Cliente può usufruire di questa offerta per un solo sito web. L'offerta non è cumulabile con altre.
Offerta valida per contratti stipulati dal 30 aprile al 31 maggio 2012 esclusivamente per nuovi clienti. Offerta non cumulabile con eventuali altre.
Inoltre l'iscrizione alla pagina Facebook dà il privilegio di ricevere istantaneamente tutte le novità, nuovi articoli e nuove allettanti offerte. Essere online non era stato così semplice!
Incorpora nel tuo blog o nel tuo sito il codice XHTML/HTML per il link a questa pagina:
Copia ed incolla il link di questa pagina, oppure se avessi il client email configurato segnala la pagina.
Oppure puoi prenderlo dal permalink: