PHP Classes

fanKounter PHP Counter Script: Manage unlimited Web page access counters

Recommend this page to a friend!
  Info   View files Documentation   Screenshots Screenshots   View files View files (57)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog (1)    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 68 All time: 10,209 This week: 200Up
Version License PHP version Categories
fankounter 5.1Custom (specified...7PHP 5, Statistics, Content management
Description 

Author

This package can manage unlimited Web page access counters.

It can keep track of the count of accesses of a given page by the means of JavaScript code than can be inserted in the pages of sites that you may want to track the accesses and can make the counter values be displayed in each page.

The package can be configured using PHP script that can contain the definition of values that may control aspects like:

- The IP addresses of computers that may access the pages but should be ignored
- Adjustments to apply to the server time to consider the current day accesses
- Number of the last accesses to maintain in memory
- Restrict access to the statistics page using a password

Innovation Award
PHP Programming Innovation award nominee
December 2020
Number 8
Web page counters are traditional way of showing how popular a page is by the means of elements that appear on a page that show the count of accesses that a page had so far.

This package implements a complex page counter solution to simplify the tracking of page access count in a reliable way that can be used to track the accesses of many pages at once.

It can also show useful statistics for site managers in a private way.

Manuel Lemos
Picture of Luca Liscio
  Performance   Level  
Name: Luca Liscio <contact>
Classes: 4 packages by
Country: Italy Italy
Age: 41
All time rank: 4137167 in Italy Italy
Week rank: 198 Up9 in Italy Italy Up
Innovation award
Innovation award
Nominee: 1x

Documentation

__ HZKnight free PHP Scripts _ vs 5.1 / _| __ _ _ __ /\ /\___ _ _ _ __ | |_ ___ _ __ | |_ / _` | '_ \ / //_/ _ \| | | | '_ \| __/ _ \ '__| | _| (_| | | | / __ \ (_) | |_| | | | | || __/ | |_| \__,_|_| |_\/ \/\___/ \__,_|_| |_|\__\___|_| lucliscio <lucliscio@h0model.org>, ITALY INFORMAZIONI SULLO SCRIPT .............................................................. 1 REQUISITI PER IL FUNZIONAMENTO ......................................................... 2 FILE INCLUSI NELLA DISTRIBUZIONE ....................................................... 3 INSTALLAZIONE DI UN CONTATORE .......................................................... 4 CONFIGURAZIONE DI UN CONTATORE ......................................................... 5 INSERIMENTO DI UN CONTATORE IN UNA PAGINA WEB .......................................... 6 VISUALIZZAZIONE DELLE STATISTICHE ...................................................... 7 CREDITI E CONTATTI ..................................................................... 8 IMPOSTAZIONI AVANZATE ................................................................. A1 DETTAGLI TECNICI ...................................................................... A2 NORMALIZZAZIONE DI UN URL ............................................................. A3 INFORMAZIONI SULLO SCRIPT 1 ------------------------------------------------------------------------------------------ fanKounter ? uno script in PHP gratuito, per creare e gestire una quantit? indefinita di contatori (grafici, testuali o invisibili) di accessi alle pagine WEB. E' indicato per un uso personale (mono-utenza), nel senso che ? possibile programmare nuovi contatori solo configurandoli manualmente e non attraverso un processo guidato via WEB e lo stesso discorso vale per amministrarli. La creazione di una nuova istanza di contatore pu? avvenire anche in modo automatico, non appena se ne faccia richiesta da una pagina WEB ritenuta lecita. E' possibile monitorare gli accessi per qualunque tipo di pagina (HTML, PHP, etc) ed in qualunque locazione del WEB esse sono poste, anche esterne al dominio in cui ? installato lo script. Per richiamare il contatore da una pagina WEB, ? sufficiente includere un piccolo file di codice JavaScript auto-generato dal fanKounter. Ogni istanza di contatore che si crea, funziona in modo indipendente dalle altre. Lo script ? molto flessibile, altamente personalizzabile e facile da configurare. Si pu? programmare la modalit? con cui i reports devono essere acquisiti, definire i tempi di una visita, escludere IP e maschere di IP, convalidare gli accessi. Ogni contatore tiene traccia dei visitatori e fornisce completi report statistici, tra cui referrer di provenienza, compresi i motori di ricerca e le parole chiave usate per trovare il nostro sito. Lo script non necessita di database, ma memorizza i dati in file, in maniera efficace ed occupando poco spazio fisico. REQUISITI PER IL FUNZIONAMENTO 2 ------------------------------------------------------------------------------------------ Lo script non dovrebbe aver bisogno di requisiti HW/SW specifici, anche se i test sono stati effettuati su un numero limitato di sistemi. * Sistema Operativo: qualunque * Server HTTP: qualunque * PHP: versione 4.2.0 o successiva * libreria GD (opzionale): versione 2.0 o successiva FILE INCLUSI NELLA DISTRIBUZIONE 3 ------------------------------------------------------------------------------------------ Decomprimendo l'archivio 'fkounter.zip', verr? ricostruita la seguente struttura di file: [fkounter5] (cartella radice) + [conf] (cartella contenente i file di configurazione) - conf_example.php (esempio di configurazione per un contatore) + [docs] (cartella contenente la documentazione) - faqs.txt (domande e risposte comuni) - history.txt (cronologia delle versioni, modalit? di aggiornamento) - license.txt (licenza per utenti finali e sviluppatori) - manual.txt (la guida all'installazione e alla configurazione) - readme.txt (documento di riferimento iniziale) + [tool] (cartella contenente utilit? varie) - db4to5.php (tool per convertire i contatori dalla versione 4 alla 5) - db4to5.txt (informazioni sull'uso del tool 'db4to5') - cal.inc.php (libreria per gestire un calendario) - cnf.inc.php (configurazione globale dello script) - counter.js.php (generatore di file JS per visualizzare il contatore) - counter.php (motore per la rilevazione e l'elaborazione dei dati) - dic.inc.php (informazioni sulle propriet? che pu? avere un visitatore) - lan.inc.php (file di testi generici in lingua italiana) - mak.inc.php (generatore automatico di istanze di contatore) - out.inc.php (gestore di stampa del contatore) - stats.css (foglio di stile per la pagina di statistiche) - stats.php (visualizzatore di statistiche) - sys.inc.php (funzioni generiche per la gestione di file) - url.inc.php (libreria per gestire URL, referrer e motori di ricerca) - ver.inc.php (definizioni per la compatibilit? con PHP versione 4.2.0) INSTALLAZIONE DI UN CONTATORE 4 ------------------------------------------------------------------------------------------ Installare un contatore ? molto semplice. Esistono, tuttavia, impostazioni avanzate che verranno trattate successivamente. Per ora preoccupiamoci dei concetti di base. * Nel caso in cui questa fosse la prima istanza di contatore, copiare sul WEB tutti i file direttamente inclusi nella cartella radice della distribuzione, rigorosamente nella stessa directory WEB (ad es. in 'fkounter5/'). * Madiante un qualsiasi editor di testi, aprire il file 'conf_example.php', che si trova nella cartella 'conf/'. * Modificare in base alle proprie preferenze le sue impostazioni, descritte in dettaglio nel paragrafo 5 (CONFIGURAZIONE DI UN CONTATORE). Queste, tuttavia, sono gi? configurate correttamente e possono essere raffinate in un secondo momento. * Salvare il file 'conf_example.php' (sempre nella cartella 'conf/') con un altro nome della forma 'config_ID.php', dove ID sar? il suo identificatore. Un ID pu? essere costituito solamente da caratteri alfanumerici, pu? avere qualsiasi lunghezza, ed ? case-sensitive, ossia "test" e "TesT" identificheranno normalmente due diverse istanze di contatore, ma questo dipende dal sistema operativo in uso. Se, ad esempio, si decide di identificare questo contatore con "test1", allora salvare il file con il nome 'conf_test1.php' (senza apici). * Copiare nel WEB, in una cartella chiamata 'conf/' e posta nella cartella radice dello script, il file 'conf_test1.php' appena creato (ad es. 'fkounter5/conf/conf_test1.php'). Il contatore ? stato creato. Per vederlo in anteprima, navigare con il browser lo scirpt 'counter.php' come segue: 'http://...etcetc.../fkounter5/counter.php?id=test1'. CONFIGURAZIONE DI UN CONTATORE 5 ------------------------------------------------------------------------------------------ Le seguenti variabili sono proprie di ogni istanza di contatore e vanno impostate nei rispettivi file di configurazione (ad es. 'fkounter5/conf/conf_test1.php' per il contatore identificato con "test1"). $cnf__userpass (STRINGA) ============== Memorizza la password per proteggere le statistiche. Tuttavia, per ragioni di sicurezza, non dev'essere inserita in chiaro, ma come risultato della funzione "md5". Per semplicit?, se la password scelta ? "admin", possiamo scriverla come segue: $cnf__userpass = md5("admin"); Per attivarla nella visualizzazione delle statistiche, fare riferimento alla variabile '$cnf__passwd_protect'. $cnf__start_count (INTERO) ================= Numero iniziale di conteggio, valido solo in fase di installazione. Normalmente 0. $cnf__mtime_unique_accs (INTERO) ======================= Definisce un tempo di visita. E' un intervallo di tempo, espresso in minuti, dentro il quale un visitatore viene ignorato se visualizza una stessa pagina WEB pi? di una volta. Normalmente 30. Se non si vogliono distinguere visitatori da visite, impostare questa variabile a 0. Il valore di questa variabile pu? essere influenzato da '$cnf__expire_on_midnight'. Il significato di questa variabile pu? essere modificato da '$cnf__count_per_pages'. $cnf__expire_on_midnight (BOOLEANO) ======================== Se questa variabile ? impostata a TRUE, il tempo di visita scadr? improrogabilmente alla mezzanotte *solo* se in base alla variabile '$cnf__mtime_unique_accs' si sarebbe protratta nel giorno successivo. Normalmente FALSE. $cnf__count_per_pages (BOOLEANO) ===================== Definisce il comportamento del contatore qualora una stessa istanza sia inserita in pi? pagine del sito. Se questa variabile ? impostata a TRUE, per ogni visitatore, solo l'accesso alla prima pagina far? incrementare il contatore e le altre pagine visitate saranno ignorate per l'intero intervallo di tempo definito in '$cnf__mtime_unique_accs'. Al contrario, se questa variabile ? impostata a FALSE, il contatore incrementer? di una unit? per ogni pagina WEB visitata nell'intervallo di tempo '$cnf__mtime_unique_accs'. Normalmente FALSE. $cnf__licit_domains_list (SEQUENZA DI STRINGHE) ======================== Validatore di chiamata. Pu? memorizzare la sequenza di URLs (paths assoluti e pagine) che contengono l'istanza di contatore. Se il contatore viene caricato da una locazione che non trova riscontro in questa sequenza, non verr? incrementato. Per disabilitare questa funzione, lasciare la sequenza vuota, ma ? sconsigliato. Esempio .......................................................................................... $cnf__licit_domains_list = array( "http://www.miosito.it/path1", "http://www.altrosito.it/path1/pagina.html" ); * la locazione "http://www.miosito.it/path1/MiaPagina.html" ? lecita * la locazione "http://www.miosito.it/path2/MiaPagina.html" NON ? lecita * la locazione "http://www.miosito.it/path1/path2/MiaPagina.html" ? lecita * la locazione "http://www.altrosito.it/path1/pagina.html" ? lecita * la locazione "http://www.altrosito.it/path1/pagina2.html" NON ? lecita NOTA: il contatore verr? incrementato solo se inserito in una locazione *lecita*. .......................................................................................... Esempio .......................................................................................... // tre locazioni equivalenti, ma espresse in tre modi diversi $cnf__licit_domains_list = array( "http://www.profitterol.altervista.org/fankounter", "http://profitterol.altervista.org/fankounter", "http://207.44.208.11/fankounter" ); .......................................................................................... Ogni URL verr? normalizzato per il confronto, come da paragrafo A3 (NORMALIZZAZIONE DI UN URL). $cnf__IPmasks_ignore_list (SEQUENZA DI STRINGHE) ========================= Validatore di chiamata. Pu? memorizzare una sequenza di IPs e maschere da escludere. Se il contatore ? invocato per conto di un IP che trova un qualche riscontro in questo array, non verr? incrementato. Nelle maschere ? possibile utilizzare i due caratteri jolly: * rappresenta un numero compreso tra 0 e 255; ? vale (sempre e solo) una cifra da 0 a 9. Esempio .......................................................................................... $cnf__IPmasks_ignore_list = array( "191.91.*.*" , "192.92.126.1??" ); * Banna tutti gli IP che iniziano con 191.91 * Banna 192.92.126.118 ma NON banna 192.92.126.11 .......................................................................................... Per disabilitare questa funzione, lasciare l'array vuoto. $cnf__htime_sync_server (INTERO) ======================= Regola l'ora del server rispetto al tempo locale, aggiungendo o sottraendo ore. Se, ad esempio, l'ora del server ? avanti 2 ore, assegnare alla variabile il valore -2; se l'ora del server ? indietro di 1 ora, assegnare alla variabile il valore +1. $cnf__last_entries (INTERO) ================== Numero degli ultimi accessi da tenere in memoria. Normalmente 15. $cnf__passwd_protect (BOOLEANO) ==================== Se uguale a TRUE, i dati statistici saranno visualizzabili solo previa identificazione tramite la password inserita in '$cnf__userpass'. $cnf__limit_view (INTERO) ================ Imposta il limite massimo di righe per le tabelle con un elevato numero di entrate. Verr? poi aggiunta un'ultima riga riepilogativa il cui valore sar? la somma delle righe escluse nella stampa. Normalmente 15. Questa variabile ha effetto solamente nella fase di stampa delle statistiche. INSERIMENTO DI UN CONTATORE IN UNA PAGINA WEB 6 ------------------------------------------------------------------------------------------ Per monitorare gli accessi ad una pagina WEB, che sia posta in qualsiasi locazione in rete e che sia scritta in qualsiasi linguaggio (HTML, PHP, etc), ? sufficiente includere, da qualche parte nella stessa, il codice JavaScript auto-generato da 'counter.js.php'. I parametri per lo script 'counter.js.php' sono 2: * id obbligatorio, uguale all'identificatore dell'istanza di contatore da usare; * mode opzionale, uguale a "graphic" (default), "text" (testo) o "hidden" (nascosto). Esempi .......................................................................................... <!-- Il seguente esempio visualizza il contatore "test1" in modalit? grafica --> <script type="text/javascript" language="javascript" src="fkounter5/counter.js.php?id=test1"></script> <!-- Il seguente esempio visualizza il contatore "test1" in modalit? testo --> <script type="text/javascript" language="javascript" src="fkounter5/counter.js.php?id=test1&mode=text"></script> <!-- Il seguente esempio nasconde nella pagina il contatore "test1" --> <script type="text/javascript" language="javascript" src="fkounter5/counter.js.php?id=test1&mode=hidden"></script> .......................................................................................... VISUALIZZAZIONE DELLE STATISTICHE 7 ------------------------------------------------------------------------------------------ Lo script 'stats.php', incluso nella distribuzione, provvede alla visualizzazione delle statistiche raccolte per un contatore, avvalendosi anche di semplici grafici. Da questo modulo potranno leggersi interessanti report statistici di vario genere. Per accedere alle statistiche di un contatore basta navigare al seguente indirizzo: http://...../fkounter5/stats.php?id=test1 dove a "test1", parametro opzionale, va sostituito l'identificatore del contatore. CREDITI E CONTATTI 8 ------------------------------------------------------------------------------------------ Il fanKounter stato ideato e programmato da *fanatiko*. Oggi il suo sviluppo affidato a *lucliscio* che puoi contattare all'indirizzo email: <lucliscio@h0model.org>. Il sito ufficiale del fanKounter : https://fankounter.hzknignt.org RISORSE * https://www.php.net ................................ homepage ufficiale del progetto PHP * https://libgd.github.io ............................ homepage delle librerie grafiche GD * https://www.php.net/manual/en/book.image ........... Uso delle librerie grafiche GD con PHP * https://browscap.org ............................... 'browscap.ini', per il riconoscimento di browser ed OS * https://github.com/bestiejs/platform.js ............ homepage ufficiale di Platform.js per il riconoscimento di browser ed OS SPECIAL THANX TO... * Tutti coloro che hanno segnalato problemi e malfunzionamenti o hanno dato suggerimenti. IMPOSTAZIONI AVANZATE A1 ------------------------------------------------------------------------------------------ In questo paragrafo sono trattati argomenti che riguardano la configurazione avanzata del fanKounter e argomenti per approfondire alcune caratteristiche dello script. Creazione automatica dei contatori ================================== In alternativa all'installazione manuale di ogni singolo contatore, ? possibile attivare un meccanismo automatico di istanziamenti. In altre parole, ogni qualvolta occorra servirsi di un nuovo contatore, non dovremo far altro che includerlo nella nostra pagina WEB, come descritto nel paragrafo 6 (INSERIMENTO DI UN CONTATORE IN UNA PAGINA WEB), senza preoccuparci di creare un file di configurazione per esso: questo lavoro lo far? per noi il fanKounter. Per attivare questa funzionalit? occorre aprire con un editor di testi il file di nome 'cnf.inc.php' ed impostare: * la configurazione default per un contatore in base alle proprie preferenze, sulla quale si baser? la configurazione di ogni nuovo contatore creato; * la costante 'MAKE_PATHS', che deve contenere un elenco di paths assoluti, separati da una virgola, da cui autorizzare richieste di istanziamenti di nuovi contatori. Esempio .......................................................................................... define( "MAKE_PATHS" , "http://www.miosito.it,http://www.altrosito.it/path1" ); * una richiesta da "http://www.miosito.it/MiaPagina.html" ? lecita * una richiesta da "http://www.miosito.it/path/MiaPagina.html" ? lecita * una richiesta da "http://www.altrosito.it/MiaPagina.html" NON ? lecita * una richiesta da "http://www.altrosito.it/path1/MiaPagina.html" ? lecita * una richiesta da "http://www.altrosito.it/path2/MiaPagina.html" NON ? lecita NOTA: solo per le richieste ritenute *lecite* verr? istanziato un nuovo contatore. .......................................................................................... Ogni URL verr? normalizzato per il confronto, come da paragrafo A3 (NORMALIZZAZIONE DI UN URL). Programmazione della rilevazione dei reports ============================================ Il fanKounter ? molto flessibile dal punto di vista della programmazione della rilevazione dei reports. Le variabili, proprie di ciascun contatore, che permettono di configurare questo aspetto sono le tre seguenti: * $cnf__mtime_unique_accs : INTEGER * $cnf__expire_on_midnight : BOOLEAN * $cnf__count_per_pages : BOOLEAN Si rimanda al paragrafo 5 (CONFIGURAZIONE DI UN CONTATORE) per il loro significato. Quando si inserisce un'istanza di contatore su pi? pagine WEB, i reports saranno globali, ma comunque sar? possibile leggere il numero degli accessi totali che ha avuto ognuna. In questa ipotesi, supposto che una stessa istanza di contatore sia presente su ogni pagina del nostro sito, impostando la variabile '$cnf__count_per_pages' al valore TRUE potremo conoscere quali sono le pagine di *accesso* al sito pi? accreditate e nel frattempo rilevare gli accessi per visitatore (del sito, vale a dire di almeno una pagina del sito, quella di entrata). Esempio .......................................................................................... // se questa istanza di contatore ? presente in tutte le pagine del nostro sito // rileva una sola visita per ogni visitatore del sito nell'arco di mezz'ora // e sapremo quali sono le pagine di accesso al sito pi? accreditate $cnf__mtime_unique_accs = 30; $cnf__expire_on_midnight = FALSE; $cnf__count_per_pages = TRUE; .......................................................................................... Solitamente ? consigliabile inserire un'istanza di contatore diversa per ogni pagina WEB, cos? da ottenere reports statistici mirati. Il lavoro ? reso estremamente semplice dalla funzione di auto-istanziamento, trattato nel paragrafo precedente. In questa ipotesi, la variabile '$cnf__count_per_pages' non ha pi? senso. Esempi .......................................................................................... // rileva una sola visita per ogni visitatore nell'arco di un'ora $cnf__mtime_unique_accs = 60; $cnf__expire_on_midnight = FALSE; $cnf__count_per_pages = FALSE; // rileva i visitatori al giorno $cnf__mtime_unique_accs = 1440; // 24 * 60 mins $cnf__expire_on_midnight = TRUE; $cnf__count_per_pages = FALSE; // rileva tutte le visite senza distinguere tra visitatori e visite $cnf__mtime_unique_accs = 0; $cnf__expire_on_midnight = FALSE; $cnf__count_per_pages = FALSE; .......................................................................................... Si consiglia di non modificare, col tempo, il metodo di rilevazione per un contatore dopo l'installazione, cos? che le statistiche possano essere sempre coerenti. Convalidare le chiamate al contatore ==================================== Questa funzione, attivabile dalla variabile '$cnf__licit_domains_list' a livello di ogni singolo contatore, permette di riconoscere chiamate lecite da chiamate falsate. Prima di decidere se o no attivarla, ? bene valutare i pro e i contro. * Pro. Non permette, ad esempio, che qualcuno sistemi impropriamente un nostro contatore sul suo sito. Le chiamate al contatore da altre locazioni non lo farebbero incrementare. * Contro. Alcuni browser, come ad esempio Opera, danno la possibilit? di disabilitare il referrer logging. In base a questa impostazione, un visitatore che accede al nostro sito non verrebbe rilevato. Impostare una password ====================== Per ragioni di sicurezza, la password in un file di configurazione non va inserita in chiaro, ma come risultato della funzione "md5". Cos?, la password va memorizzata nel modo seguente: $cnf__userpass = "21232f297a57a5a743894a0e4a801fc3"; perch? ovviamente risulta che: md5("admin") = 21232f297a57a5a743894a0e4a801fc3 Per impostare una nuova password, sia questa "lucertola", basta creare ed eseguire un semplice script in PHP contenente la seguente riga: <?php echo md5("lucertola"); ?> Il risultato che si otterr? andr? sostituito al valore di '$cnf__userpass'. Eliminazione automatica di dati obsoleti ======================================== Il fanKounter elimina periodicamente dal database alcuni dati obsoleti e con pochi hits, quali chiavi di ricerca, referrer che forse non esistono pi? o non linkano pi? il nostro sito, etc. Tuttavia, i punti di questi non vengono perduti, ma vengono sommati in una apposita voce riepilogativa. Cos? facendo, periodicamente si sfoltisce il database. Le variabili che programmano questo aspetto, inserite nel file 'cnf.inc.php', sono le seguenti: * define( "CUTTIME" , 60*60*24*180 ); // funzione attivata ogni 6 mesi * define( "CUTSIZE" , 150 ); // limita le strutture dati alle prime 150 voci Supporto alla multiutenza ========================= Il fanKounter attualmente non prevede la modalit? multiutente e tutti i contatori creati appartengono all'utente che li amministra. Tuttavia, sono state previste alcune variabili proprie di ogni istanza di contatore che possono tornar utili se si volesse sviluppare il fanKounter per un utilizzo simile. * $cnf__username = "admin"; * $cnf__usermail = "user@email.com"; * $cnf__userpass = md5("admin"); Allo stato attuale, solo la variabile '$cnf__userpass' viene utilizzata dal fanKounter per limitare l'accesso alle statistiche di un contatore. DETTAGLI TECNICI A2 ------------------------------------------------------------------------------------------ Il fanKounter memorizza i dati statistici di un contatore in un file ben strutturato e conforme a PHP. I vantaggi principali che ne conseguono sono due: un file di dati non tende a crescere in termini di dimensioni col tempo, ma resta pressoch? costante; per acquisire i dati non occorrono cicli di lettura e rielaborazioni, ma basta un'inclusione nello stile PHP. La creazione di un file di dati in formato PHP ? immune da errori, grazie a degli accorgimenti adottati che vengono riassunti nel seguente algoritmo: - inizio esecuzione - 1 se esiste un backup del database, sostituiscilo al database originale // exit() in caso di errore e cancellalo 2 carica il database nello script 3 aggiorna i dati statistici sulla base dei precedenti dati 4 effettua un backup del database // exit() in caso di errore 5 crea un database aggiornato e sostituiscilo al precedente // exit() in caso di errore 6 ricarica il database nello script // exit() in caso di errore 7 cancella il backup del database - fine esecuzione - Lo script ? provvisto di una libreria di funzioni sui file che garantiscono che le operazioni di copia, cancellazione, etc o si compiano (sicuramente) correttamente o provochino l'interruzione immediata dell'esecuzione dell'intero script. In questo modo, l'algoritmo precedente diventa sicuro. Altra caratteristica importante del fanKounter ? l'auto controllo che tiene sulla crescita delle strutture dati che col tempo possono eccedere in numero di elementi. Si pensi, ad esempio, ai referrer: un sito molto popolare pu? essere linkato da centinaia di altri siti. Pu? capitare, tuttavia, che alcuni di questi abbiano successivamente rimosso il link ed i loro hits non abbiano pi? modo di crescere col tempo, sprofondando tra le ultime posizioni *in eterno*. Cos?, periodicamente il fanKounter rimuove i dati con queste caratteristiche e riassume i loro hits in una voce riepilogativa creata per lo scopo. NORMALIZZAZIONE DI UN URL A3 ------------------------------------------------------------------------------------------ Ogni URL viene normalizzato ad una forma canonica, eliminando inoltre l'informazione ritenuta non utile. Cos?, due URL apparentemente differenti vengono riconosciuti uguali, mediante confronto stringa a stringa, quando questi rappresentino lo stesso indirizzo WEB. Nelle variabili di configurazione di un contatore ? consigliabile inserire URL in forma normalizzata, ma non ? obbligatorio. Non tralasciare comunque mai il protocollo "http://". Volendo formalizzare, un generico indirizzo WEB rispetta questa sintassi: URL ::= http://DOMAIN[PORT][PATH][FILE[PARAMS]] DOMAIN ::= ((www.|(Alias.)*)DomainName.Extension|IpAddress) PORT ::= :PortNumber PATH ::= (/PathName)* FILE ::= /FileName.Extension PARAMS ::= ?ParamName=Value(&ParamName=Value)* dove [ELEM] ? un elemento opzionale; (Elem1|Elem2) vale "Elem1" oppure "Elem2"; (Elem)* ? nullo oppure vale "Elem" ripetuto una o pi? volte. La normalizzazione di un URL si basa, fondamentalmente, su questi passi: * i caratteri maiuscoli di DOMAIN vengono ridotti in minuscolo; * se DOMAIN ? sia privo di "www." che di un Alias, viene prefissato con "www."; * PORT, quando presente, viene eliminato se PortNumber ? uguale a "80"; * tutta la parte PARAMS viene cancellata; * FILE viene cancellato se FileName ? uguale ad "index"; * se un PathName ? nullo o uguale a ".", "/PathName" viene cancellato; * se un PathName ? uguale a "..", "/PathName" e "/PathName" genitore vengono cancellati. Esempi .......................................................................................... http://MioSito.it:80/Path/index.htm?id=15 equivale a... http://miosito.it:80/Path/index.htm?id=15 equivale a... http://www.miosito.it:80/Path/index.htm?id=15 equivale a... http://www.miosito.it/Path/index.htm?id=15 equivale a... http://www.miosito.it/Path/index.htm equivale a... http://www.miosito.it/Path/ equivale a... http://www.miosito.it/Path http://www.AltroSito.com/Path/../Pagina.htm?param=ciao equivale a... http://www.altrosito.com/Path/../Pagina.htm?param=ciao equivale a... http://www.altrosito.com/Path/../Pagina.htm equivale a... http://www.altrosito.com/Pagina.htm .......................................................................................... Quando si inserisce un URL nelle variabili di configirazione, quali 'MAKE_PATHS' e '$cnf__licit_domains_list', ? sufficiente inserire solo una delle forme equivalenti, possibilmente quella normalizzata. Esempio .......................................................................................... // cinque espressioni equivalenti, di cui tutte tranne la prima sono superflue $cnf__licit_domains_list = array( "http://www.miosito.it/news", // questa ? ok "http://miosito.it/news", // questa ? superflua "http://www.miosito.it/news/", // questa ? superflua "http://www.miosito.it/news/index.php", // questa ? superflua "http://www.miosito.it/news/index.php?page=1" // questa ? superflua ); .......................................................................................... C'? da notare che alcuni siti caricano tutte le pagine avvalendosi di un unico modulo speciale che fa le veci di loader, utilizzando un parametro di pagina. In questi casi, purtroppo, si perder? il riferimento alla pagina, come mostra quest'ultimo esempio di normalizzazione. Esempio .......................................................................................... http://www.ulterioresito.net/module.php?page=4 equivale a... http://www.ulterioresito.net/module.php ..........................................................................................

Details
__ HZKnight free PHP Scripts _ vs 5.1 / _| __ _ _ __ /\ /\___ _ _ _ __ | |_ ___ _ __ | |_ / _` | '_ \ / //_/ _ \| | | | '_ \| __/ _ \ '__| | _| (_| | | | / __ \ (_) | |_| | | | | || __/ | |_| \__,_|_| |_\/ \/\___/ \__,_|_| |_|\__\___|_| ****************************************************************************************** readme.txt lucliscio <lucliscio@h0model.org>, ITALY ****************************************************************************************** Grazie per aver scaricato il fanKounter. Adesso devi configurarlo ed installarlo sul tuo host WEB: queste operazioni sono molto semplici e richiedono qualche minuto. Il fanKounter viene distribuito insieme alla seguente documentazione, che puoi trovare nella cartella 'docs'. license.txt Le condizioni di utilizzo, modifica e redistribuzione per l'utente finale. manual.txt La guida alla configurazione, all'installazione e all'uso dello script. faqs.txt Le risposte alle domande pi? comuni, sui problemi e sulle funzionalit?. history.txt La progressione delle versioni, i miglioramenti apportati, i bugs eliminati e la modalit? di aggiornamento. Se desideri contattare l'autore, scrivi a: lucliscio <lucliscio@h0model.org>. Il nuovo sito ufficiale del fanKounter ?: https://lucliscio.github.io/fanKounter/.

Screenshots  
  • opera-snapshot-2018-04-21-021535-localhost-932x986.png
  • screenshot-localhost-3000-2018.04.25-22-57.png
  Files folder image Files  
File Role Description
Files folder image.circleci (1 file)
Files folder image.github (2 directories)
Files folder image.vscode (1 file)
Files folder imagedocs (5 files)
Files folder imagesrc (15 files, 7 directories)
Files folder imagetest (4 files)
Accessible without login Plain text file .travis.yml Data Auxiliary data
Accessible without login Plain text file CODE_OF_CONDUCT.md Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file ISSUE_TEMPLATE.md Data Auxiliary data
Accessible without login Plain text file LICENCE.md Lic. License text
Accessible without login Plain text file pakage.json Data Auxiliary data
Accessible without login Plain text file PULL_REQUEST_TEMPLATE.md Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation
Accessible without login Plain text file VERSION Data Auxiliary data
Accessible without login Plain text file _config.yml Data Auxiliary data

  Files folder image Files  /  .circleci  
File Role Description
  Accessible without login Plain text file config.yml Data Auxiliary data

  Files folder image Files  /  .github  
File Role Description
Files folder imageISSUE_TEMPLATE (2 files)
Files folder imageworkflows (1 file)

  Files folder image Files  /  .github  /  ISSUE_TEMPLATE  
File Role Description
  Accessible without login Plain text file Bug_report.md Data Auxiliary data
  Accessible without login Plain text file Feature_request.md Data Auxiliary data

  Files folder image Files  /  .github  /  workflows  
File Role Description
  Accessible without login Plain text file php.yml Data Auxiliary data

  Files folder image Files  /  .vscode  
File Role Description
  Accessible without login Plain text file settings.json Data Auxiliary data

  Files folder image Files  /  docs  
File Role Description
  Accessible without login Plain text file faqs.txt Doc. Documentation
  Accessible without login Plain text file history.txt Doc. Documentation
  Accessible without login Plain text file license.txt Doc. Documentation
  Accessible without login Plain text file manual.txt Doc. Documentation
  Accessible without login Plain text file readme.txt Doc. Documentation

  Files folder image Files  /  src  
File Role Description
Files folder imageconf (1 file)
Files folder imagedata (1 file)
Files folder imagei18n (2 files)
Files folder imageimg (2 files, 1 directory)
Files folder imagelibs (3 files, 1 directory)
Files folder imagetemp (1 file, 1 directory)
Files folder imagetemplate (1 directory)
  Accessible without login Plain text file browscap_update.php Example Example script
  Plain text file cal.inc.php Class Class source
  Accessible without login Plain text file cnf.inc.php Aux. Auxiliary script
  Accessible without login Plain text file counter.js.php Aux. Auxiliary script
  Accessible without login Plain text file counter.php Example Example script
  Accessible without login Plain text file dic.inc.php Aux. Auxiliary script
  Accessible without login Image file favicon.ico Data Auxiliary data
  Accessible without login Plain text file index.php Aux. Auxiliary script
  Accessible without login Plain text file mak.inc.php Example Example script
  Accessible without login Plain text file out.inc.php Example Example script
  Accessible without login Plain text file stats.css Data Auxiliary data
  Accessible without login Plain text file stats.php Example Example script
  Accessible without login Plain text file sys.inc.php Aux. Auxiliary script
  Plain text file url.inc.php Class Class source
  Accessible without login Plain text file ver.inc.php Aux. Auxiliary script

  Files folder image Files  /  src  /  conf  
File Role Description
  Accessible without login Plain text file conf_example.php Aux. Auxiliary script

  Files folder image Files  /  src  /  data  
File Role Description
  Accessible without login Plain text file data_example.php Aux. Auxiliary script

  Files folder image Files  /  src  /  i18n  
File Role Description
  Accessible without login Plain text file en.inc.php Aux. Auxiliary script
  Accessible without login Plain text file it.inc.php Aux. Auxiliary script

  Files folder image Files  /  src  /  img  
File Role Description
Files folder imagecounters (2 files)
  Accessible without login Image file fankounter3.0.png Icon Icon image
  Accessible without login Image file icon-1.fw-128x128.png Icon Icon image

  Files folder image Files  /  src  /  img  /  counters  
File Role Description
  Accessible without login Image file classic_counters.png Icon Icon image
  Accessible without login Image file new_counters.png Icon Icon image

  Files folder image Files  /  src  /  libs  
File Role Description
Files folder imagejs (1 file)
  Plain text file Browscap.php Class Class source
  Plain text file rain.tpl.class.php Class Class source
  Plain text file UUID.class.php Class Class source

  Files folder image Files  /  src  /  libs  /  js  
File Role Description
  Accessible without login Plain text file platform.js Data Auxiliary data

  Files folder image Files  /  src  /  temp  
File Role Description
Files folder imagetpl (2 files)
  Accessible without login Plain text file accs_example.dat Data Auxiliary data

  Files folder image Files  /  src  /  temp  /  tpl  
File Role Description
  Accessible without login Plain text file login.71953e2636e3...24f5bcf4e4.rtpl.php Aux. Auxiliary script
  Accessible without login Plain text file stats.71953e2636e3...24f5bcf4e4.rtpl.php Example Example script

  Files folder image Files  /  src  /  template  
File Role Description
Files folder imagefanKounter_classic (3 files)

  Files folder image Files  /  src  /  template  /  fanKounter_classic  
File Role Description
  Accessible without login Plain text file login.tpl Data Auxiliary data
  Accessible without login Plain text file stats.css Data Auxiliary data
  Accessible without login Plain text file stats.tpl Data Auxiliary data

  Files folder image Files  /  test  
File Role Description
  Accessible without login Plain text file old_counter_img.png.php Aux. Auxiliary script
  Accessible without login HTML file test.html Doc. Documentation
  Plain text file test.php Class Class source
  Accessible without login Plain text file test_url.php Example Example script

 Version Control Unique User Downloads Download Rankings  
 96%
Total:68
This week:0
All time:10,209
This week:200Up