Vorresti linkare un file sul tuo sito, ma questo ha estensione .jpg, .png, .mp4, .mp3, .pdf, … ?

Al contrario di file come ad esempio .zip o .exe che non possono direttamente essere aperti nel browser e verranno quindi scaricati, gli altri andranno ad aprirsi in una nuova scheda del browser.

Come consentire quindi ad un utente di scaricare sul proprio dispositivo i file della prima categoria elencata?

Grazie alla funzione readfile integrata in PHP fare ciò diventa molto semplice:

 

$file_url = 'http://www.ilmioserver.com/nomedelfile.exe';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);

 

Al posto di $file_url metti il collegamento al file che intendi far scaricare.

In Content-Type devi mettere il MIME type in base all’estensione che ha il file, ad esempio un’immagine .jpg ha come MIME type “image/jpeg”.

 

Qui trovi la lista completa di tutti i MIME type.


Categorie: PHPProgrammazione

2 commenti

  • Roberto Valentini · 08/05/2021 alle 17:42

    Il comando header(“Content-disposition: attachment; pare inserisca in un file che deve scaricare due a capo.
    Ho fatto questo piccolo programma per scaricare un file di tipo csv ottenuto da una tabella mysql.
    Il file di partenza non pare avere anomalie
    Una volta arrivato sul PC mi ritrovo due comandi CRLF all’inizio del file.
    I due comandi fanno si che, una volta caricato su excel, mi ritrovo la riga 1 e la riga 2 vuote.
    Come si puo’ rimediare?
    Grazie

    Angelo · 01/08/2019 alle 22:40

    Ciao Fabrizio, una domanda ti è mai capitato di incappare nel download forzato su smartphone ?

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *