{"id":214,"date":"2009-11-13T21:20:00","date_gmt":"2009-11-13T21:20:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=214"},"modified":"2009-11-13T21:20:00","modified_gmt":"2009-11-13T21:20:00","slug":"didattica-php-contare-i-download-di-file","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/didattica-php-contare-i-download-di-file\/","title":{"rendered":"Didattica PHP: Contare i download di file"},"content":{"rendered":"<div><span><br \/>Hai un sito  vuoi sapere quante volte un tuo file \u00e8 stato scaricato? Ecco un pratico script che sfrutta i file di testo per poter salvare il numero di download dei vostri file. Il file richiede un file di testo per ogni file ma evita l&#8217;uso di database.<\/p>\n<p><\/span><span>Vediamone il codice e analizziamone i passaggi:<br \/><\/span><\/div>\n<p><span><br \/><\/span><\/p>\n<pre><span>\/\/ Ottengo il riferimento del file da scaricare<br>$file=$_GET['f'];<br><br>\/\/ Se non esiste gi\u00e0, creo la directory 'reports'.<br>\/\/ Qui andranno tutti i file generati con<br>\/\/ i counter dei vari file<br>if(!is_dir('reports')) {<br>mkdir('reports', 0777);<br>chmod('reports', 0777);<br>}<br><br>\/\/ Definisco il nome del file report<br>$filename='reports\/'.basename($file).'.txt';<br><br>\/\/ Se il file del report esiste gi\u00e0, mi occupo di ottenerne il contenuto<br>\/\/ viceversa, definisco il counter a 0<br>if(file_exists($filename)) {<br>$handle=fopen($filename,'r');<br>$counter=fread($handle, filesize($filename));<br>fclose($handle);<br>} else {<br>$counter=0;<br>}<br><br>\/\/ Incremento il counter di 1, quindi scrivo il valore ottenuto nello stesso<br>\/\/ file, sovrascrivendone il contenuto.<br>$counter++;<br>$handle=fopen($filename, 'w+');<br>fwrite($handle, $counter);<br>fclose($handle);<br>chmod($filename, 0777);<br><br>\/\/ Infine, dispongo gli header per il donwload e istruisco il parser<br>\/\/ sul file da far scaricare all'utente.<br>header('Content-Type: application\/octet-stream');<br>header('Content-Disposition: attachment; filename=\"'.basename($file).'\"');<br>header('Content-Transfer-Encoding: binary');<br>readfile(\"$file\");<br>exit;<br><\/span><\/pre>\n<p><span><br \/><\/span><\/p>\n<div><span>Inizialmente diciamo allo script  mediante <\/span><span>$_GET<\/span><span> di prelevare il link che verr\u00e0 passato come argomento e di salvarlo nella variabile $file. Fatto ci\u00f2 controlliamo mediante <\/span><span>is_dir<\/span><span> se esiste la cartella report dove verranno salvati i file di testo di ogni file contenti i numeri di download. Se essa non esiste ne crea una nuova e mediante <\/span><span>chmod<\/span><span> le associa il permesso 0777. Ora lo script si appresta a creare la stringa, che funger\u00e0 da nome per il file di testo, contenente il nome del programma che si sta scaricando seguito dall&#8217;estensione .txt. Si noti che viene usata la funzione <\/span><span>basename<\/span><span> che dal link $file preleva solo il nome del file privo del path completo.<br \/>Una volta fatto ci\u00f2 si controlla se il file di testo esiste. In caso esso esiste allora prelevo il dato scritto dentro e lo assegno alla variabile $counter altrimenti lo creo e la variabile la imposto pari a 0. Ora lo script non fa altro che incrementare $counter di 1 ($counter++ equivale ad $counter = $counter + 1) e la scrive sul file di testo sovrascrivendo ci\u00f2 che c&#8217;\u00e8 dentro. Si ha cos\u00ec il file contenente il numero di download del file aggiornato ogni volta che qualcuno clicca sul link di download.<\/p>\n<p>Per utilizzare lo script basta scrivere nella nostra pagina web il link mediante la sintassi:<\/p>\n<p><\/span><\/div>\n<div><span><a href=\"http:\/\/1.bp.blogspot.com\/_Tg1CIil2fDM\/Sv3WCjQzR5I\/AAAAAAAAAaA\/DXTtKHvC2Sk\/s1600-h\/phpscript.jpg\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/_Tg1CIil2fDM\/Sv3WCjQzR5I\/AAAAAAAAAaA\/DXTtKHvC2Sk\/s400\/phpscript.jpg\" alt=\"\" border=\"0\"><\/a><br \/>Ringrazio <a href=\"http:\/\/www.webmate.it\/?scripts\/countermate-contare-download-senza-db.html\">l&#8217;utente<\/a> del forum di ubuntu-it che ha scritto questo script iniziale sul quale ho poi lavorato e che ho modificato.<\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hai un sito vuoi sapere quante volte un tuo file \u00e8 stato scaricato? Ecco un pratico script che sfrutta i file di testo per poter salvare il numero di download dei vostri file. Il file richiede un file di testo per ogni file ma evita l&#8217;uso di database. Vediamone il codice e analizziamone i passaggi: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52,4,21],"tags":[],"class_list":["post-214","post","type-post","status-publish","format-standard","hentry","category-didattica","category-opencode","category-php"],"views":1581,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=214"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/214\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=214"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}