2009-02-10 14 views
15

Estoy buscando agregar una función "Descargar este archivo" debajo de cada video en uno de mis sitios. Necesito obligar al usuario a descargar el archivo, en lugar de simplemente vincularlo, ya que a veces comienza a reproducir un archivo en el navegador. El problema es que los archivos de video se almacenan en un servidor separado.php - ¿Cómo forzar la descarga de un archivo?

¿Alguna forma de forzar la descarga en PHP?

+0

posible duplicado de [Forzar a descargar un archivo usando PHP] (http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php) – bummi

Respuesta

35

usted podría intentar algo como esto:

$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; 

Acabo de probar y funciona para mí.

Tenga en cuenta que para readfile poder leer una URL remota, debe tener su fopen_wrappers activado.

+0

Solo recuerda ir: str_replace ('"', '\\"', $ file_name) Antes de ponerlo en el encabezado –

+5

El error con esto es que todo el video se ejecutará a través de su servidor. Si el video está en un servidor separado por razones de ancho de banda, esta solución no será aceptable. – Zoredache

+0

Punto tomado. Por el sonido de la pregunta, sin embargo, tuve la impresión de que no tiene acceso a este servidor remoto, de lo contrario, sería un problema trivial. Si ese es el caso, hasta donde yo sé, esta sería la única solución. –

0

Prueba esto:

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

La clave es la header(). Debe enviar el encabezado junto con la descarga y forzará el cuadro de diálogo "Guardar archivo" en el navegador del usuario.

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

usando este código. ¿Es posible guardar el nombre del archivo a lo que desea? por ejemplo, tiene url: http://remoteserver.com/file.mp3 en lugar de "file.mp3" se puede utilizar este script para descargar el archivo como "newname.mp3"

5

archivo download.php evaluados es

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"); 

y el enlace a descarga es

<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

Proporcione una descripción más detallada de su solución. – clemens

Cuestiones relacionadas