Foros del Web » Programando para Internet » PHP »

Problema para descargar archivos

Estas en el tema de Problema para descargar archivos en el foro de PHP en Foros del Web. Hola amigos del Foro, Los molesto porque tengo el siguiente problema: estoy tratando de armar una página php desde la que se pueda descargar un ...
  #1 (permalink)  
Antiguo 13/12/2004, 12:25
 
Fecha de Ingreso: marzo-2003
Ubicación: Chivilcoy
Mensajes: 142
Antigüedad: 21 años
Puntos: 0
Problema para descargar archivos

Hola amigos del Foro,
Los molesto porque tengo el siguiente problema: estoy tratando de armar una página php desde la que se pueda descargar un archivo a la PC del cliente. Para ello uso el siguiente coódigo:
<body>
<?
$file = 'cerrar.gif';
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename=' . basename($file));
readfile($file);
?>
</body>

El tema es que esto me devuelve la siguiente lista de errores:
Warning: Cannot modify header information - headers already sent by (output ftp.php:9) in ftp.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at ftp.php:9) in ftp.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at ftp.php:9) in ftp.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at ftp.php:9) in ftp.php on line 14
GIF89a<Äÿ™ÿÌ€ÿ¬0ÿÿÿÿæÀÿòßÿ¿`ÿŸÿÓÿ³@ÿ¹Pÿ¦ ÿß°ÿùïÿÆpÿìÐÿÙ ÿ÷Þ!ùÿ,<âàP(@ižhª®,«C#´tm·BÜ|o3Ÿph ȤR(` b ãR™x6°Ýt cJ CÉA @€EÀ°p$Ôl÷Qf8Jðv·x¢Q1U ‡‰‹eO;ŒŠ>U)  %n" oU#o_£¡<–_'©O´Ž&U·%N´·¹G&†š Ç¢ª`Ê ÀÀD³:}: ¶¸Ì ªÒÓ‰V$/´ææ èN¿ÌGÇRÇ<†±>ø[¦ H@&‘0ɺ;

He probado cambiando el nombre y el tipo de archivo a descargar, pero siempre hace lo mismo, me muestra la estructura del mismo y no me da ninguna opción para descargarlo.
Si alguien me puede dar una mano se lo voy a agradecer
Saludos
__________________
Leandro Mandarano
Cyper Developments
http://www.cyper.com.ar
  #2 (permalink)  
Antiguo 13/12/2004, 15:01
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
No debe enviarse html o hacer un echo antes de usar la funcion header(), debes asegurarte que eso se cumpla. podrias dejar ese script sólo con este codigo:

<?
$file = 'cerrar.gif';
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename=' . basename($file));
readfile($file);
?>

es decir, sin las etiquetas html.
  #3 (permalink)  
Antiguo 13/12/2004, 17:58
 
Fecha de Ingreso: marzo-2003
Ubicación: Chivilcoy
Mensajes: 142
Antigüedad: 21 años
Puntos: 0
Claudio, comprendo, muchas gracias por tu ayuda, el problema que tengo ahora es que si bien descarga el archivo, me lo descarga sin extensión y con el nombre de la página php y no con el nombre del archivo (es decir, si el php se llama download.php, y el archivo cerrar.gif; me descarga un archivo llamado download sin extensión). Qué estoy haciendo mal?
Saludos y desde ya muchas gracias por tu ayuda
__________________
Leandro Mandarano
Cyper Developments
http://www.cyper.com.ar
  #4 (permalink)  
Antiguo 14/12/2004, 05:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En teoría .. esta cabecera HTTP es la que define el nombre que va a tener tu archivo:

header('Content-Disposition: attachment; filename=' . basename($file))

Es más .. el "basename()" toma la ruta completa de tu archivo sólo. Ahora, lo que es cierto es que no todo navegador (cliente) entiende por igual esas cabeceras .. Por mi parte he probado ese tipo de cabeceras con el mismo problema en navegadores como IE 5.x .. me dá el nombre del archivo .php que lo ejecuta pero si le doy a "abrir" a la "segunda" me sale el nombre del archivo que le dí con esas cabeceras .. En IE 6 no me sucede eso y en otros navegadores ahora no recuerdo .. pero el comportamiento no es uniforme.

Lamentablemente eso ya no es problema de "PHP" .. Las cabeceras HTTP son própias del protocolo HTTP (que lo define sus RFC's correspondientes) .. otra cosa es que los "navegadores" las cumplan.

Un saludo,
  #5 (permalink)  
Antiguo 14/12/2004, 05:44
 
Fecha de Ingreso: marzo-2003
Ubicación: Chivilcoy
Mensajes: 142
Antigüedad: 21 años
Puntos: 0
Cluster, muchas gracias por tu explicación, probaré con otros navegadores a ver que sucede.
Saludos y gracias
__________________
Leandro Mandarano
Cyper Developments
http://www.cyper.com.ar
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 11:50.