_Home_ My.Projects() $BLOG! About.me #Contact

Login

 | Contatore Donwload PHP


PHP | Scritto da Admin il 02/07/2020 @ 15:00

Vai direttamente al download.

Introduzione

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).


Implementazione

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:

Lo script SQL per la creazione è presente più avanti.


Configurazione

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

A questo punto, si deve modificare il path della cartella web (in genere questa è del tipo /web/htdocs/www.example.it/home).
Aprendo il fiel download.php, è sufficente raggiungere la riga:

$path = '/web/htdocs/www.example.it/home';

e modificarla con il valore corretto.
La funzione php getcwd() può venire in aiuto in questo caso.

Volendo, è possibile cambiare il nome del database, cambiando la riga:

$DB_FILE_COUNTER = 'counter.sqlite';

e rinominando il file del database di conseguenza.

Database

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

Limiti e miglioramenti

Questo script è volutamente così semplice. Funge più che altro come base di partenza per meccanismi più complessi, ma può anche essere usato così com'è.

Download

Potete scaricare il tutto direttamente dall'apposito gist su GitHub.