2009-02-10 13 views
15

Sto cercando di aggiungere una funzione "Scarica questo file" sotto ogni video su uno dei miei siti. Devo forzare l'utente a scaricare il file, invece di limitarsi a collegarlo ad esso, poiché a volte inizia a riprodurre un file nel browser. Il problema è che i file video sono archiviati su un server separato.php - Come forzare il download di un file?

Qualsiasi modo per forzare il download in PHP?

+0

possibile duplicato di [Forzare per scaricare un file utilizzando PHP] (http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php) – bummi

risposta

35

si potrebbe provare qualcosa di simile:

$file_name = 'file.avi'; 
$file_url = 'http://www.myremoteserver.com/' . $file_name; 
header('Content-Type: application/octet-stream'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url); 
exit; 

ho appena provato e funziona per me.

Si prega di notare che per readfile per poter leggere un URL remoto, è necessario avere il fopen_wrappers abilitato.

+0

Ricorda solo di andare: str_replace ('"' ',' \\" ', $ file_name) Prima di inserirlo nell'intestazione –

+5

Il difetto con questo è che tutto il video verrebbe eseguito attraverso il suo server. Se il video si trova su un server separato per motivi di larghezza di banda, questa soluzione non sarà accettabile. – Zoredache

+0

Punto preso. Dal suono della domanda, però, ho avuto l'impressione che non abbia accesso a questo server remoto, altrimenti sarebbe un problema banale. Se questo è il caso, per quanto ne so questa sarebbe l'unica soluzione. –

0

Prova questo:

<?php 
$FileName = '/var/ww/file.txt'; 
header('Content-disposition: attachment; filename="'.$FileName.'"'); 
readfile($FileName); 

La chiave è il header(). Devi inviare l'intestazione insieme al download e forzerà la finestra di dialogo "Salva file" nel browser dell'utente.

0
<?php 
$FileName = '/var/ww/file.txt'; 
header('Content-disposition: attachment; filename="'.$FileName.'"'); 
readfile($FileName); 

utilizzando questo codice. è possibile salvare il nome del file in quello che vuoi. per esempio avete url: http://remoteserver.com/file.mp3 invece di "file.mp3" si può utilizzare questo script per scaricare il file come

5

file di download.php Tested "newname.mp3" è

function _Download($f_location, $f_name){ 
    $file = uniqid() . '.pdf'; 

    file_put_contents($file,file_get_contents($f_location)); 

    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: ' . filesize($file)); 
    header('Content-Disposition: attachment; filename=' . basename($f_name)); 

    readfile($file); 
} 

_Download($_GET['file'], "file.pdf"); 

e il link al download è

<a href="download.php?file=http://url/file.pdf"> Descargar </a> 
0
<?php 

    $file_name = 'video.flv'; 
    $file_url = 'http://www.myserver.com/secretfilename.flv'; 
    header('Content-Type: application/octet-stream'); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"".$file_name."\""); 
    echo file_get_contents($file_url); 
    die; 

?> 
+0

Si prega di fornire una descrizione più dettagliata della soluzione. – clemens

Problemi correlati