Dato il numero sempre crescente di file scaricabili da questo sito, ho deciso di introdurre un contatore di download per tenerne traccia e poter
estrapolare un qualche tipo di dato statistico.
Ad esempio, quali file sono più richiesti in generale o da uno specifico utente. In quest'ultimo caso, è possibile derivare un'arena di interesse e di conseguenza
potrebbe essere importante spostare determinati file in un servizio di storage esterno (AWS o simili).
L'idea è molto semplice: una direttiva nel file .htaccess (che può anche essere stabilita a livello locale, all'interno di specifiche directory), riscrive tutti
gli url che terminano per zip, rar o pdf (questi sono quelli di default, è banale aggiungere altre estensioni), usando l'url al file come parametro per uno script php.
Questo script si occuperà di verificare il file, registrare in un database sqlite il download ed infine avviare il download del file stesso, in modo completamente trasparente.
Il tutto è composto da tre file:
Aprendo il file .htaccess
, la prima cosa fa fare è indicare il path in cui si trova lo script. Nel file fornito, si suppone che questo
si trovi nella root del sito web.
Se invece, poniamo il caso, questo si trovi in una sottocartella, ad esempio /download/file
, allora scriverete:
RewriteEngine On
RedirectMatch ^.*\.(zip|rar|pdf)$ /download/file/download.php?file=$0
/web/htdocs/www.example.it/home
).download.php
, è sufficente raggiungere la riga:$path = '/web/htdocs/www.example.it/home';
getcwd()
può venire in aiuto in questo caso.
$DB_FILE_COUNTER = 'counter.sqlite';
Di seguito è fornito la create table (che è presente anche nel file table.sql
):
CREATE TABLE "DOWNCOUNTER" (
"IP" TEXT NOT NULL,
"DATE" TEXT NOT NULL,
"FILENAME" TEXT NOT NULL,
"HIT" INTEGER NOT NULL DEFAULT 1,
PRIMARY KEY("IP","DATE","FILENAME")
)
Attenzione! Qualsiasi modifica a questo script (ad es. cambio nome tabella/campi, cambio tipi, aggiunta campi etc.) DEVE essere riportata anche nel file
download.php
, pena il fallimento all'esecuzione.
Per creare il file, potete usare (su Windows) un programma come SQLite Browser, che vi permette di importare
un database da file sql, cliccando su:
File/Importa/Database da file SQL
e selezionando il file table.sql
.
Successivamente, quando verrà chiesto di salvare il nuovo database, è fortemente consigliato di usare il nome
predefinito del database, counter.sqlite
, o comunque di rinominarlo prima di caricarlo sul proprio sito.
Qualunque altra scelta deve essere riportata nel file download.php
come riportato nella sezione precedente, Configurazione
Questo script è volutamente così semplice. Funge più che altro come base di partenza per meccanismi più complessi, ma può anche essere usato così com'è.
Potete scaricare il tutto direttamente dall'apposito gist su GitHub.