giovedì 7 giugno 2012

Download file con password

Vediamo come realizzare un elenco di link per il download, protetti da password

Esempio


Download file tramite password

Inserisci la password e avvia il download del tuo file

Capita spesso di avere documenti più o meno riservati, che si desidera condividere solo con una cerchia ristretta di persone e non con tutti gli utenti del nostro sito.
In questa guida vediamo come fare per visualizzare un elenco di documenti pronti al download, ma che possono essere scaricati solo dopo avere inserito una password (che avremo comunicato solo a chi deve scaricare il nostro file).

Vedremo anche come creare e proteggere con password una serie di link interni o esterni al nostro sito.

Come sempre anticipo il link dello script completo (si tratta di uno ZIP con tutti i file dell'esempio) per i frettolosi che non vogliono leggere tutta la guida. Il link è ripetuto anche in fondo, per chi invece vuole seguire la guida passo passo.

Per spiegare meglio lo script PHP ho suddiviso il codice in varie sezioni, così da poterle individuare più semplicemente.

Vediamo prima di tutto se il nostro server supporta PHP

Se siamo sicuri che il nostro server supporti PHP possiamo saltare questo passaggio e andare avanti al punto successivo.
Altrimenti è molto semplice verificare la presenza di PHP sul nostro server, basta seguire questi semplici passi.

Analizziamo lo script

Lo script è composto da 6 sezioni di codice:
  1. nel primo blocco di codice definiamo le nostre preferenze (url del sito), messaggi ecc...;
  2. nel secondo blocco di codice definiamo dove si trova il file da scaricare, la password da inserire e come si chiama il file;
  3. il blocco successivo si occupa di verificare la password e avviare il download;
  4. poi come sempre ho inserito un po di CSS per rendere il tutto gradevole (anche l'occhio vuole la sua parte) questo codice può essere modificato o cancellato completamente;
  5. due righe di codice per visualizzare i messaggi che lo script rende;
  6. finalmente i link che visualizzerà l'utente finale;

Prima sezione di codice le preferenze

//imposto messaggio di password corretta
$ok = '<p class="green">Ok password corretta inizio il download tra 5 secondi...</p>';

// imposto messaggio di errore
$errore = '<p class="red">Attenzione password errata, prova nuovamente!</p>
<p><a href="mailto:info@example.com?subject=Richiesta nuova password">Richiedi nuova password</a></p>';

// imposto messaggio di benvenuto
$plain = '<p class="plain">Inserisci la password e avvia il download del tuo file</p>';

// imposto l'url dove si trova questo file
// se ad esempio si vuole installare lo script nella cartella download
// $site sarà: http://www.example.com/download
$site = 'http://www.example.com';

Seconda sezione di codice i file e le password

// inserisco il nome, la password e la cartella del file 1
if(isset($_POST["submit1"])){
 $dir  = "dir-dwnload-1234";     /*nome cartella dove si trova il file da scaricare*/
 $file = "file1.zip";            /*nome file da scaricare*/
 $pswd = "pippo";                /*password per questo file*/
}

// inserisco il nome, la password e la cartella del file 2
else if(isset($_POST["submit2"])){
 $dir  = "dir-dwnload-1234";     /*nome cartella dove si trova il file da scaricare*/
 $file = "file2.pdf";            /*nome file da scaricare*/
 $pswd = "pluto";                /*password per questo file*/
}

// inserisco il nome, la password e la cartella del file 3
else if(isset($_POST["submit3"])){
 $dir  = "";                     /*nome cartella dove si trova il file da scaricare*/
 $file = "";                     /*nome file da scaricare*/
 $pswd = "paperino";             /*password per questo file*/
 $site = 'http://www.google.it'; /*l'url del link da raggiungere con la password*/
}

Tersa sezione di codice controllo e download

// controllo 
if($_POST["_pswd"] != $pswd){
 $msg = $errore;
}
if(($_POST["_pswd"] == $pswd)&&($pswd != "nopsw")){
 $msg = $ok;
 // avvio il download
 header("Refresh: 5; URL=".$site."/".$dir."/".$file."");
}

Quarta sezione il codice CSS

<style type="text/css">
* {
 padding:3px;
 margin:3px;
}
body {
 font: 1em "Trebuchet MS", Arial, Helvetica, sans-serif;
 color: #333;
 width:500px;
}
ul, li, p {
 -webkit-border-radius: 5px;
 border-radius: 5px;
}
ul {
 background: #039;
}
li {
 background: #D7F2F4;
 list-style:none;
}
label {
 font-size: 0.8em;
 color: #009;
}
.red {
 color: #FFF;
 background: #F00;
}
.green {
 color: #FFF;
 background: #0C0;
}
.plain {
 color: #FFF;
 background: #CCC;
}
</style>

Quinta sezione di codice stampa dei messaggi

// gestiamo i messaggi proventienti da controllo 
if((isset($msg))&&($pswd != "nopsw")){
 echo $msg; 
}else{
 echo $plain;
}

Sesta sezione di codice i link ai file

<ul>
  <li>
    <form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <label>Download <strong class="re">file1.zip</strong></label>
      <input type="password" name="_pswd">
      <input type="submit" name="submit1" value="download">
    </form>
  </li>
  <li>
    <form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <label>Download <strong>file2.pdf</strong></label>
      <input type="password" name="_pswd">
      <input type="submit" name="submit2" value="download">
    </form>
  </li>
  <li>
    <form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <label>Apri la <strong>Home Page di Google</strong></label>
      <input type="password" name="_pswd">
      <input type="submit" name="submit3" value="download">
    </form>
  </li>
</ul>

Spieghiamo

Nella prima parte è fondamentale impostare la variabile $site con l'url della cartella contenente tutti i file (sia PHP che le cartelle contenenti i file da scaricare). Se ad esempio si vuole installare lo script e i file da scaricare, nella cartella download-file (quella che si trova nel file ZIP dell'esempio) l'url sarà: http://www.example.com/download-file;

Nel secondo blocco di codice si impostano: il nome della cartella dove si trova il file da scaricare, il nome del file e la password. Da notare che per inserire un link protetto da password basta inserire la password e aggiungere la riga di codice con l'url del link esempio: $site = 'http://www.google.it'; (vedi riga 20 del secondo esempio di codice). Gli altri valori vanno lasciati vuoti;

Il terzo blocco di codice controlla la password. Qui non va modificato nulla;

Quarto blocco è composto da codice CSS per rendere più gradevole la parte visiva. Questo codice si può modificare a proprio piacimento o direttamente cancellare, senza compromettere il funzionamento dello script;

Anche il quinto blocco di codice non va modificato. Serve a visualizzare i messaggi dello script.

Nel sesto blocco di codice c'è l'HTML per visualizzare i vari link.

Se dobbiamo aggiungere altri link, basta duplicare le righe contrassegnate nel secondo esempio (dalla 8 alla 13) e le righe del sesto esempio (dalla 9 alla 15). Nei due blocchi di codice va impostato lo stesso valore submitX che dovrà essere corrispondente e univoco, per collegare il link dell'HTML con l'if del PHP.

Nota bene

Questo script è utile per celare l'effettivo link del tuo download. Tuttavia per file molto importanti, potrebbe essere interessante aumentare la sicurezza dei download, proteggendo la cartella in altro modo, con sistemi che utilizzano protezioni lato server direttamente sulle cartelle e sui file stessi.

Per questo motivo ti consiglio di utilizzarlo con cautela, a tuo rischio e pericolo, e soprattutto su file di relativa importanza.

Download

Da questo link è possibile scaricare l'intero script

Nessun commento:

Posta un commento