Download di file senza svelarne il percorso

Può essere utile in alcuni casi permettere il download di files senza però mostrarne il percorso e quindi la directory dove sono contenuti.
Utile nei casi in cui si vuole impedire di sfogliare la directory non svelandola, appunto (anche se sarebbe sempre meglio impedirlo direttamente dall'httpd.conf o con un file .htaccess)
Oppure quando i file sono in una directory all'interno del server ma non raggiungibile via web.
Il link non deve quindi essere verso il file da scaricare ma verso una pagina php (es. download.php) alla quale passerai il nome del file come variabile, in questo modo:

HTML:
  1. <a href="download.php?file=nomefile.zip">Scarica</a>

il file download.php sarà invece strutturato così.

PHP:
  1. <?php
  2. $file=$_GET['file'];
  3. $percorso="/var/percorso/directory/download/";
  4. $percorso_file=$percorso.$file;
  5. $dimensione_file=filesize($percorso_file);
  6. header("Content-Type: application; name=".$file);
  7. header("Content-Transfer-Encoding: binary");
  8. header("Content-Length: ".$dimensione_file);
  9. header("Content-Disposition: inline; filename=".$file);
  10. header("Expires: 0");
  11. header("Cache-Control: no-cache, must-revalidate");
  12. header("Cache-Control: private");
  13. header("Pragma: public");
  14. readfile($percorso_file);
  15. ?>

Update: inoltre con poche altre righe di php, utilizzando questo sistema è possibile monitorare il download.

Altri articoli di interesse

3 Responses to “Download di file senza svelarne il percorso”


  • Qualora dovesse essere scaricato un file, ad esempio un’immagine, richiedendo la finestra di download anziché visualizzarla direttamente nel browser bisogna usare attachment anziché inline nel Content-disposition.

  • Chiedo scusa per la banalita’ della domanda ma davvero non riesco ad uscire da questo intoppo:

    Voglio far scaricare il file pippo.zip
    che sta nella cartella pluto
    che e’ contenuta nella directory principale di
    http://www.pippopluto.com

    esattamente come devo compilare la riga del file upload.php
    intendo la riga 2
    /var /percorso/directory/downlaod/
    le ho provate quasi tutte tranne quella giusta….
    esempi certamente non giusti:
    /http://www.pippopluto.com/pluto/
    /www.pippopluto.com/pluto/
    pippopluto.com/pluto/

    non ce la faccio piu’….
    GRAZIE PER LA PAZIENZA!

  • grazie lo stesso
    ho risolto

Leave a Reply