|
|
||
|
|
Un contatore di download dal un sito serve a tenere sotto controllo
quante persone scaricano un dato file, per verificare se esso sia
qualcosa che abbia successo o non interessi molto i naviganti della
rete. E, di conseguenza, studiare come comportarsi per migliorare le
pagine del sito stesso. In genere sarebbe necessario un archivio sul
server, ma si può optare anche per un file di testo che tenga conto dei
click, cioè dei download su un determinato link e aggiornare il numero
memorizzato. Insomma occorre una pagina dinamica che si può costruire
con un codice php.
Cercando di qua e di là si trova qualcosa di già pronto, come questo file (che potrà chiamarsi index.php): <html> <head> <title>Conteggio download di file</title> </head> <body> <div align="center"> <p> </p> <a href="getfile.php?<?php echo 'name=prova'; ?>">Scarica prova.doc</a> (download <?php @include("public/prova.txt"); ?>, size <?php $dim = @filesize ("prova.doc") / 1024; $dim = round($dim); echo "$dim KB"; ?>) </div> </body> </html> Il file "prova" può essere chiamato come si desidera e si abbia l'accortezza di chiamare allo stesso modo, a meno del suffisso, il file che terrà il conto dei download successivi. Si costruisce e si archivia sul sito un file chiamato prova.txt che contenga, inizialmente, il numero 1 (da caricare nella cartella chiamata public). Occorre anche quest'altro file (che potrà chiamarsi getfile.php): <?php //estensione dei file da scaricare $ext = ".doc"; //nome directory con i file di testo, compreso lo slash / finale $counterdir = "public/"; //controllo che nell'url ci sia il nome del file da scaricare, if(isset($_GET['name']) && trim($_GET['name'])) { //se il file richiesto esiste, avviene il download if (file_exists("$_GET[name]$ext")) { header("Location: $_GET[name]$ext"); //apro il file .txt relativo al download richiesto e lo incremento di 1 $file = @fopen("$counterdir/$_GET[name].txt","r"); $count = @fread($file, 100); $countplus = ($count + 1); @fclose($file); $fileb = @fopen("$counterdir/$_GET[name].txt","w"); @fwrite($fileb, $countplus, 100); @fclose($fileb); //altrimenti, se il file richiesto non esiste, parte l'email di avviso al webmaster e visualizzo a video un messaggio di errore } else { $_GET['name'] = str_replace(">", ">", $_GET['name']); $_GET['name'] = str_replace("<", "<", $_GET['name']); $today = date("j F Y G:i"); $user_ip = "$_SERVER[REMOTE_ADDR]"; $to = "tuaemail@tuosito.xx"; $subject = "Download non trovato"; $body = "L'utente $user_ip il giorno $today non ha trovato il file $_GET[name]$ext"; @mail("$to","$subject","$body"); echo "Il file $_GET[name]$ext non è disponibile per il download.<br> Riprova più tardi."; } //altrimenti, se il nome del file non è passato via get, redirect alla pagina principale } else { header("Location: index.php"); } ?> Si possono modificare i nomi dei file e delle cartelle, ma bisogna avere l'accortezza di controllare che in ogni parte dei due file surriportati ci sia lo stesso nome. Naturalmente va indicata la propria posta elettronica dove vi è tuaemail@tuosito.xx Se si hanno file con estensione diversa da .doc. basterà cambiare l'impostazione iniziale in getfile.php alla variabile $counterdir = e in index.php nella riga di @filesize.
Si costruisce la pagina che manderà,
tramite un apposito link, a quella del download che sarà data dal file
index.php quindi, cambiando ciò che occorre con un editor tipo
notebook, si caricherà sia il file index.php che getfile.php, oltre al
file che contiene il numero dei download. (Prova.txt deve andare nella
cartella public, o come la si voglia chiamare). Perché la cartella public, se si usa un server di Aruba? Per il fatto che tale cartella deve avere i permessi di scrittura, oltre che di lettura. E public già è predipsosta in tal senso. Non invece le altre che, anche se sono modificate nei permessi con qualunque software ftp, non sono abilitate. Naturalmente i permessi di lettura e scrittura, per la cartella che contiene il file del conteggio dei download, devono essere assicurati, qualunque sia il server che ospita il nostro sito. Ecco la domanda ad Aruba e la risposta dei responsabili: Vorrei sapere se ci sono problemi per scrivere, con php, su un file di testo i conteggi di download di alcuni miei file. Non mi funziona lo script ma sono sicuro che sia esatto. Con ftp leggo che i file suddetti sono abilitati alla lettura (che mi funziona) e alla scrittura (che non funziona).
|
|