back to top

Forzare il download di un file con PHP

In un vecchio articolo abbiamo visto come forzare il download di un file utilizzando ASP. Recentemente mi è stato chiesto come fare la stessa cosa utilizzando il PHP… ecco, quindi, questo breve e semplice articolo che vi spiegherà, appunto, come forzare il download di un file utilizzando PHP.

Mediante il codice che vedremo sarà, quindi, possibile obbligare il browser del nostro utente ad aprire un determinato collegamento come finestra di download anche se si tratta di un documento che, normalmente, il nostro browser andrebbe a visualizzare (ad esempio un file .doc, .xml, .txt, ecc.).

Per ottenere questo risultato sarà sufficiente agire sugli header mediante un codice che usermo come "filtro" tra l’utente ed il file che vogliamo venga scaricato. Vediamo come:

<?php
// definisco una variabile con il percorso alla cartella
// in cui sono archiviati i file
$dir = "/root/www/download/";

// Recupero il nome del file dalla querystring
// e lo accodo al percorso della cartella del download
$fn = (isset($_GET['filename']) ? $_GET['filename'] : false);

// controllo la sintassi del file richiesto
if (!preg_match('/^[a-z0-9]+\.[a-z]{2,3}$/i',$fn)) {
  $fn = false;
}else{
  $file = $dir . $fn;  
}
  
// verifico che il file esista
if (!file_exists($file))
{
  // se non esiste stampo un errore
  echo "Il file non esiste!";
}else{
  // Se il file esiste...
  // Imposto gli header della pagina per forzare il download del file
  header("Cache-Control: public");
  header("Content-Description: File Transfer");
  header("Content-Disposition: attachment; filename= " . $file);
  header("Content-Transfer-Encoding: binary");
  // Leggo il contenuto del file
  readfile($file);
}
?>
Salviamo questo codice come force-download.php ed utilizziamolo in questo modo:
force-download.php?filename=miofile.doc
Così facendo noterete che il file .doc del nostro esempio non verrà aperto nel browser il quale si limiterà ad aprire la finestra di dialogo per l’inizio del download.

Altri contenuti interessanti

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Cannot modify header information – headers already sent: come risolvere l’errore PHP

L'errore di PHP cannot modify header information - headers...

Ricavare l’estensione di un file con PHP

Quando si lavora con i file in un'applicazione web,...

GD Library: creazione, manipolazione e ridimensionamento immagini con PHP

Le librerie GD (o GD Library), sono componenti fondamentali...

PHP: impostare il fuso orario italiano

Le tue pagine PHP non mostrano lโ€™orario corretto? Probabilmente...

5 script PHP per gestire BBCode

A volte può aversi l'esigenza di dover offrire agli...
Pubblicitร