Foros del Web » Programando para Internet » PHP »

Forzar descargas

Estas en el tema de Forzar descargas en el foro de PHP en Foros del Web. Hola, he revisado todo el foro buscando como forzar la descarga de un archivo correctamente pero no encuentro la solución a mi problema. Al descargar ...
  #1 (permalink)  
Antiguo 26/10/2008, 05:36
Avatar de chechu_  
Fecha de Ingreso: mayo-2007
Mensajes: 282
Antigüedad: 17 años
Puntos: 0
Forzar descargas

Hola, he revisado todo el foro buscando como forzar la descarga de un archivo correctamente pero no encuentro la solución a mi problema.

Al descargar los archivos aparecen vacios, la idea es poder descargar todo tipo de archivos, tanto imágenes, como HTML, como textos o como música, pero todo llega vacio, aunque las imágenes las puedo ver con photoshop, pero no con el visor de imágenes, por lo que supongo que llegan incompletas o rotas.

El código que uso para la descarga es este.

<?php
$archivo_a_descargar = $_GET["f"];
header("Content-type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".$archivo_a_descargar);
header("Content-Length: ".filesize($archivo_a_descargar));
readfile($archivo_a_descargar);
$fp = fopen("$archivo_a_descargar", "r");
fpassthru($fp);
?>
Y el enlace es este.
$archivo = “Archivo.jpg”;
<a href='Descargar.php?f=Imagenes/$archivo'>Descargar</a>
  #2 (permalink)  
Antiguo 26/10/2008, 10:12
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 3 meses
Puntos: 1
Respuesta: Forzar descargas

Deberías poner varios "echo" para saber cómo vas recogiendo las variables. Por ejemplo, yo lo pondría así:
Código:
<?php
$archivo_a_descargar = $_GET["f"];
echo "Lo que recibo con GET es: " . $f;
header("Content-type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".$archivo_a_descargar);
header("Content-Length: ".filesize($archivo_a_descargar));
readfile($archivo_a_descargar);
$fp = fopen("$archivo_a_descargar", "r");
fpassthru($fp);
fclose($fp);
?>
Porque me da la sensación de que el problema es que lo que recibes no es lo que crees. Por ejemplo, en $archivo_a_descargar se supone que recoges es imagenes/loquesea.jpg y eso no es un archivo, sino una ruta a un archivo. El archivo sería loquesea.jpg O así lo interpreto yo. Deberías recibir solo el nombre del archivo, y hacer la referencia al directorio en que se encuentra después.
  #3 (permalink)  
Antiguo 26/10/2008, 14:26
Avatar de chechu_  
Fecha de Ingreso: mayo-2007
Mensajes: 282
Antigüedad: 17 años
Puntos: 0
Respuesta: Forzar descargas

Al poner el echo he podido comprobar que el archivo s es el correcto, además hacienda varias modificaciones he conseguido que funcione para los HTML, pero con las imágenes sigo teniendo el mismo error.

El código que me funciona para los HTML es este.
$file = $f;
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
readfile($file);
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:21.