Foros del Web » Programando para Internet » PHP »

Forzar descarga de archivo con headers

Estas en el tema de Forzar descarga de archivo con headers en el foro de PHP en Foros del Web. Hola a todos, necesito ayuda a ver si alguien ha tenido el mismo problema que yo o sabe qué pasa. Necesito forzar la descarga de ...
  #1 (permalink)  
Antiguo 16/03/2004, 07:04
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
Antigüedad: 15 años, 10 meses
Puntos: 0
Forzar descarga de archivo con headers

Hola a todos, necesito ayuda a ver si alguien ha tenido el mismo problema que yo o sabe qué pasa.

Necesito forzar la descarga de un archivo .txt, o sea, genero un link y que, al presionar sobre él, se abra un diálogo de descarga en vez que el explorador muestre el contenido del archivo.

En modo local (en un servidor web que tengo en mi ordenador) lo tengo funcionando perfectamente con el siguiente código:

<?
//obtiene el nombre del archivo a descargar pasado por 'url'
$file = $_GET["nombre"];
//seencuentra en el directorio 'export/' en el servidor
$url = "export/".$file;

header ("Content-Disposition: attachment; filename=".$file.";" );
header ("Content-Type: application/force-download");
readfile($url);
exit;
?>

pero al subirlo al espacio web que tengo (en miarroba) no me aparece la ventana de descarga sino que me muestra el contenido del archivo.

¿Alguién sabe cómo solucionarlo? ¿a alguién le ha pasado lo mismo?

Toni.
  #2 (permalink)  
Antiguo 16/03/2004, 07:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 18 años
Puntos: 129
Cambiando de servicio de hosting xDD.

Bueno .. en serio: ¿ usas el mismo navegador para todas tus pruebas? (las de tu servidor local y las del hosting que usas y falla?)

En teoría las cabeceras HTTP que mandas desde PHP son para indicar al navegador (cliente) el tipo de dato que vas a enviar .. y que este lo interprete como archivo a descargar o mostrarlo/asociarlo con la aplicación que corresponda (ejemplo un pdf -> mandarlo al lector de PDF que uses .. un gráfico .. lo abre directo dependiendo del tipo .. etc).

Por ende (en teoría) si usas el mismo navegador para tus pruebas en uno y otro servidor (tu código) no debería darte problemas .. Los problemas de ese tipo suelen ser por usar uno u otro navegador .. NO todos los navegadores interpretan de la misma forma las cabeceras HTTP ya que .. si bien es un standard (hay una RFC que lo define) no todos la cumplen (navegadores) y usan las suyas própias (sobre todo los productos de M$)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 16/03/2004, 11:50
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
Antigüedad: 15 años, 10 meses
Puntos: 0
cambio de hosting

He cambiado de hosting (concretamente a Lycos) y ahora sí me sale el diálogo de descarga. Estoy tratando de ver si me soluciona el problema un administrador de un foro de miarroba.

Sin embargo, me ha surgido otro problema :P, y es que al generar el archivo de texto (el que luego me quiero descargar) los cambios de línea los hago escribiendo en el archivo (mediante una función de PHP) y finalizando la línea con "\r". En mi servidor en modo local, que va sobre windows, el resultado es un cambio de línea normal cuando lo ves con el bloc de notas. Sin embargo, cuando me bajo el archivo de texto desde la página Web del hosting de lycos sale un especie de cuadrado* en vez del cambio de línea. Creo que es debido a que el servidor es UNIX.

Alguien sabe alguna manera de evitar esto. Necesito que el archivo de texto generado sea compatible para windows, principalmente, y si lo consigo para ambos operativos, mucho mejor. Tiene que haber alguna manera...

Toni.

Pd.: Gracias por la respuesta y la sugerencia de cambio de host Cluster, tienes alguna idea sobre esto?

*es el mismo cuadrado que sale (en vez un cambio de línea) cuando generas un archivo de texto en una máquina UNIX y lo visualizas en windows. Es debido a que el carácter de fin de línea es distinto de un SO a otro.
  #4 (permalink)  
Antiguo 16/03/2004, 11:52
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
Antigüedad: 15 años, 10 meses
Puntos: 0
Se me olvidaba!!

Por cierto Cluster!! se me olvidaba devirte que sí que uso el mismo navegador para todas las pruebas, concretamente el MSIE. No lo he probado sobre otros pero a mi me da que el problema es del servidor de hosting.
  #5 (permalink)  
Antiguo 16/03/2004, 12:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 18 años
Puntos: 129
Sobre el tema de las cabeceras HTTP no sé la solucíón .. yo sólo sé que servicios de hosting suelen meter su própio código incrustrado en cada página que generas para añadir la correspondiente publicidad .. Eso sule dar problemas cuando tu intentas enviar tus própias cabeceras HTTP ya que -antes- de las tuyas el "servidor" ha enviado las suyas ... (pero tampoco te lo puedo confirmar 100%)

Sobre el tema del salto de línea .. Tienes los "retornos de carro" y el "salto de línea" .. \r y \n respectivamente .. Depende del S.O. se usa \n o \r o \r\n .. Puedes identificar el S.O. del cliente conectado a tu script que solicita la creación de tu archivo que le se lo vas a entregar para descarga como para generar tu salto de línea adecuado para ese S.O. concreto ..

El S.O. del cliente lo puedes ver con funciones como:

Puedes usar la función:
get_browser();

O bien la variable de servidor:
$_SERVER['HTTP_USER_AGENT']

(previo filtrado para quedarte con el dato que te interese de todos los que ofrece sobre el "cliente")

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 16/03/2004, 12:30
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
Antigüedad: 15 años, 10 meses
Puntos: 0
La diferencia está en el servidor

Sí, tienes razón, voy a probar un par de cosas a ver si va a ser culpa de la publicidad que se visualiza antes de yo enviar la cabeceras y por ello no las envía.

En lo referido a los retornos de carro y demás... el problema es que yo todas las pruebas las hago desde la misma máquina, el mismo SO, navegador, etc. Sin embargo, al conectarme al servidor local me genera un archivo de texto con los retornos de carro para windows, en el hosting de miarroba tambiém, pero en el de lycos los genera para UNIX. El código en todos los servidores es el mismo pero el archivo de texto resultante no.

Mi pregunta es: ¿cómo puedo preveer eso y cómo puedo ponerle remedio?.

Toni.
  #7 (permalink)  
Antiguo 08/10/2007, 10:07
 
Fecha de Ingreso: septiembre-2007
Mensajes: 15
Antigüedad: 12 años, 4 meses
Puntos: 0
Re: Forzar descarga de archivo con headers

Cita:
Iniciado por tonait Ver Mensaje
Hola a todos, necesito ayuda a ver si alguien ha tenido el mismo problema que yo o sabe qué pasa.

Necesito forzar la descarga de un archivo .txt, o sea, genero un link y que, al presionar sobre él, se abra un diálogo de descarga en vez que el explorador muestre el contenido del archivo.

En modo local (en un servidor web que tengo en mi ordenador) lo tengo funcionando perfectamente con el siguiente código:

<?
//obtiene el nombre del archivo a descargar pasado por 'url'
$file = $_GET["nombre"];
//seencuentra en el directorio 'export/' en el servidor
$url = "export/".$file;

header ("Content-Disposition: attachment; filename=".$file.";" );
header ("Content-Type: application/force-download");
readfile($url);
exit;
?>

pero al subirlo al espacio web que tengo (en miarroba) no me aparece la ventana de descarga sino que me muestra el contenido del archivo.

¿Alguién sabe cómo solucionarlo? ¿a alguién le ha pasado lo mismo?

Toni.
A mi me pasa lo mismo y no encuentro la solución, yo necesito que se descargue un archivo con extensión XML, sin embargo, éste se abre en el propio navegador, yo trabajo con ASP y he encontrado algunas soluciones, pero no satisfacen lo que necesito y otras no funcionan, si alguien sabe la manera les agradeceria bastante.


Saludos
  #8 (permalink)  
Antiguo 08/10/2007, 10:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 7 meses
Puntos: 2135
Re: Forzar descarga de archivo con headers

Quetzalhammer:

Te recomiendo dos cosas:

1.- Visites el foro de ASP ya que probablemente encuentres la solucion a tu problema
2.- Evites rescatar temas de hace mas de 3 anios, es mejor si empiezas uno nuevo y en el foro adecuado.

Saludos.
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 03:01.