Tag Archive for 'directory'

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.

Leggere il contenuto di una directory

Con questo script è possibile leggere il contenuto di una directory.
Tramite un cliclo while viene mostrato il nome dell'oggetto trovato, se trattasi di file o directory e la dimensione

PHP:
  1. $Directory  = "."; // la directory di cui mostrare il contenuto
  2.  
  3. if(is_dir($Directory))
  4. {
  5.     $dir = opendir($Directory);
  6.     echo "<pre>";
  7.     while(false !== ($file = readdir($dir)))
  8.     {
  9.         $type = filetype($Directory ."/". $file);
  10.     // $size = filesize($file); corretto come sotto
  11.         $size = filesize($Directory ."/". $file);
  12.         echo "$file | $type | $size \n";
  13.     }
  14.     closedir($dir);
  15.     echo "</pre>";
  16. }
  17. else
  18. {
  19.     echo $Directory . " non è una directory";
  20. }