Forzare il download di un file .pdf con PHP

Ma che rottura di scatole sti .pdf? Dovete pubblicare un comunicato sul vostro sito, e vorreste far scaricare il file in .pdf ai vari interessati. Ma un semplice link non basta, perché se avete installato Adobe Reader o Acrobat, il file verrà automaticamente aperto nel browser. Sarà pur vero che c’é l’opzione “Salva File” una volta aperto il file nel browser, che si può cliccare con il tasto destro sul link e fare “Salva con Nome“, ed anche che si può caricare un file .zip per ovviare il problema. Ma la domanda resta: E’ possibile impedire che il .pdf si apra nel browser?

Purtroppo, con i normali codici no, in quanto il file richiama automaticamente l’applicazione installata. Ovviamente, se non avete installato Reader o Acrobat, non avrete di questi problemi. Fatto sta che, attualmente, anche nuovi software (come Foxit) permettono l’apertura del file nel browser web. Esiste però un semplicissimo trucchetto, attuabile da chiunque, che sfrutta il PHP per forzare il download di un file .pdf (e di qualunque altro file che normalmente si apre nel browser, come un .txt ad esempio, o un .html).

Mettiamo caso che vogliamo fare scaricare un file che si chiama ciao.pdf. Apriamo il blocco note (o un qualunque altro editor) ed incolliamoci dentro questo codice:

<?php
 header('Content-disposition: attachment; filename=ciao.pdf');
 header('Content-type: application/pdf');
 readfile('percorso/ciao.pdf');
?>

Il codice spiega, molto semplicemente, che il file deve essere letto come un allegato, e che pertanto và scaricato sul proprio PC per poter essere letto. Specifica anche che stiamo parlando di un file .pdf, pertanto, se dobbiamo far scaricare un altro file come un .txt, dovremo modificarne l’estensione. Facciamo particolarmente attenzione ad una cosa: nella seconda riga di codice, filename=ciao.pdf specifica il nome che avrà il file una volta scaricato sul pc (che può essere anche diverso dal vero nome del file che avete caricato!); nella penultima riga invece, readfile, bisogna specificare il percorso del file che si vuole far scaricare. Non sono dunque ammessi errori, se non si scrive il percorso corretto, non si scaricherà un bel niente!

A questo punto, salviamo il nostro codice in un file. Io, ad esempio, do al file lo stesso nome del documento (per regolarmi in futuro), quindi lo chiamerò ciao.php. Adesso carichiamo il file nel nostro sito, dove più ci aggarba.

Ci tocca ora modificare il link al file. Se prima il collegamento era diretto al file .pdf, ora dobbiamo farlo puntare al nostro file .php, che fungerà da interprete per avviare il download. Giusto perché repetita juvant, il codice sarà:

<a href="percorso/ciao.php">Scarica Ciao.pdf</a>

Aggiornata anche questa pagina sul sito, cliccando sopra il link potremo scaricare il nostro file senza dover ricorrere ad altri metodi. Questo è un metodo, anche se un po’ macchinoso, funzionerà sempre, a patto che il vostro host supporti il PHP. Se utilizzate dei CMS come Joomla o WordPress, esistono delle estensione che eseguono questo procedimento in modo automatico. Questo procedimento è rivolto per lo più a chi mantiene un sito statico.