Come forzare il download di file con PHP

Voglio richiedere che un file venga scaricato quando l'utente visita una pagina web con PHP. Penso che abbia qualcosa a che fare con file_get_contents, ma non sono sicuro di come eseguirlo.

$url = "http://example.com/go.exe";

Dopo aver scaricato un file con header(location) non reindirizza ad un'altra pagina. Si ferma e basta.

Leggete i documenti sulla funzione built-in PHP readfile

$file_url = 'http://www.myremoteserver.com/file.exe';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
readfile($file_url); // do the double-download-dance (dirty but worky)

Assicurati anche di aggiungere il tipo di contenuto appropriato basato sul tuo file application/zip, application/pdf ecc. - ma solo se non vuoi attivare la finestra di dialogo di salvataggio.

Commentari (5)
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"file.exe\""); 
echo readfile($url);

è corretto

o meglio uno per i file di tipo *exe

header("Location: $url");
Commentari (5)
<?php
$file = "http://example.com/go.exe"; 

header("Content-Description: File Transfer"); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"". basename($file) ."\""); 

readfile ($file);
exit(); 
?>

Oppure, quando il file non è apribile con il browser, puoi semplicemente usare l'intestazione Location:

<?php header("Location: http://example.com/go.exe"); ?>
Commentari (5)