Foros del Web » Programando para Internet » PHP »

Forzar a Explorer a que descargue un PDF

Estas en el tema de Forzar a Explorer a que descargue un PDF en el foro de PHP en Foros del Web. Hola a todos! Necesito ayuda!! Por defecto, Internet Explorer abre los documentos pdf como si fueran una nueva página web. Como tengo en mis páginas ...
  #1 (permalink)  
Antiguo 03/11/2003, 12:41
 
Fecha de Ingreso: noviembre-2003
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Forzar a Explorer a que descargue un PDF

Hola a todos!
Necesito ayuda!!
Por defecto, Internet Explorer abre los documentos pdf como si fueran una nueva página web. Como tengo en mis páginas muchos documentos pdf y algunos de ellos muy grandes, necesito saber si existe algún código en php para forzar a IE a que en lugar de abrir directamente los pdf, abra la ventana de diálogo con la opción Guardar archivo. ¿Alguien me puede ayudar?
Muchísimas gracias
Luganito
  #2 (permalink)  
Antiguo 03/11/2003, 20:28
 
Fecha de Ingreso: noviembre-2003
Mensajes: 52
Antigüedad: 14 años, 1 mes
Puntos: 0
proba esto (no es php pero tendria que funcionar)

header("Content-type: application/pdf");
header("Content-disposition: attachment;filename=arch.pdf");


  #3 (permalink)  
Antiguo 04/11/2003, 06:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
chilipeppers .. te faltó que PHP lea el archivo y lo entregue al buffer de salida ..

Código PHP:
<?
header
("Content-type: application/pdf");
header("Content-disposition: attachment;filename=arch.pdf");
readfile("arch.pdf");
?>
Y tienes razón .. no es "PHP" en el fondo .. son cabeceras HTTP.

(En las FAQ's del foro hay otro ejemplo completo con opción "resume" .. y si buscas por el foro por "content-type" seguro que te salen más alternativas con diferentes cabeceras HTTP)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 04/11/2003, 08:26
 
Fecha de Ingreso: noviembre-2003
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Ok, gracias por las respuestas. Probé el código, pero lo que hace ahora es forzar al iexplorer a descargar la página php en lugar de visualizarla.
  #5 (permalink)  
Antiguo 04/11/2003, 08:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,
Cita:
Mensaje Original por luganito
Ok, gracias por las respuestas. Probé el código, pero lo que hace ahora es forzar al iexplorer a descargar la página php en lugar de visualizarla.
Veamos, no tienes que poner ese codigo en la pagina que genera el HTML. Lo que tienes que hacer es cambiar el link de

href="tu_fichero.pdf"

a

href="descarga_pdf.php"

siendo descarga_pdf.php el script con el codigo que te han dado.

Saludos.

PD: No hay forma de que PHP modifique la forma de actuar del navegador al pinchar en un link que no sea un PHP.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 04/11/2003, 14:10
 
Fecha de Ingreso: octubre-2003
Mensajes: 96
Antigüedad: 14 años, 2 meses
Puntos: 0
mmm, dificil

Hay forma de mandar al explorador a bajar multiples archivos desde una sola pagina php???
  #7 (permalink)  
Antiguo 04/11/2003, 14:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Bueno, he probado tal como me indicaron cluster y josemi y el script funciona: el pdf sí o sí se descarga vía cuadro de diálogo "guardar destino".

El primer tema es que se abre una ventana que da error mientras se descarga el archivo, y esa ventana no se cierra automáticamente (no importa, lo resolveré con javascript)

y el segundo tema es que en el caso de que la página tenga varios enlaces a documentos pdf, hay que crear tantas páginas con el script modificado como enlaces a pdfs... ¿o existe alguna forma de que el script simplifique la bajada no importe la cantidad de archivos pdf que se enlacen a dicha página?

Perdonen si mi nivel en php es mínimo, pero preguntando se aprende, ¡¡¡y más de maestros como ustedes!!!
  #8 (permalink)  
Antiguo 04/11/2003, 15:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. lo de crear tantas páginas (scripts.php) como archivos tengas .. para eso está "PHP" ..

Usa el mismo código del ejemplo pero de forma dinámica ..

Un ejemplo sencillo para que veas el concepto (!= a seguro) sería:

bajarpdf.php
Código PHP:
<?
// Capturo la variable que llega por el URL "archivo" ...
$archivo=$_GET['archivo'];
// Se componen las cabeceras HTTP .. uso el nombre del archivo "dinámicamente" de la variable $archivo ...
header("Content-type: application/pdf");
header("Content-disposition: attachment;filename=".$archivo.".pdf");
readfile($archivo.".pdf");
?>
Y su uso .. (en las páginas HTML/PHP que lo necesites)

Código PHP:
<a htref="bajarpdf.php?archivo=nose">bajate nose.pdf</a>
<
a htref="bajarpdf.php?archivo=otro">bajate otro.pdf</a
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 04/11/2003, 15:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
¿Ventana de error? No me suena. A no ser que el href le hayas puesto un target="_BLANK". Si se lo quitas, no intenta abrirlo en una nueva pagina y se que da en la misma.

Y de un link solo puedes descargar un fichero (a no ser que comprimas varios en un zip). Tendria que ir pinchando en cada link.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 05/11/2003, 05:08
 
Fecha de Ingreso: octubre-2003
Mensajes: 96
Antigüedad: 14 años, 2 meses
Puntos: 0
MMM, no hay forma desde una página PHP abrir otras que se encarguen de bajar cada una un archivo diferente?.
Hay alguna forma de que no aparesca la ventana del explorador?

Última edición por JaViS; 05/11/2003 a las 05:32
  #11 (permalink)  
Antiguo 07/11/2003, 04:58
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Cita:
Mensaje Original por Cluster
chilipeppers .. te faltó que PHP lea el archivo y lo entregue al buffer de salida ..

Código PHP:
<?
header
("Content-type: application/pdf");
header("Content-disposition: attachment;filename=arch.pdf");
readfile("arch.pdf");
?>
Y tienes razón .. no es "PHP" en el fondo .. son cabeceras HTTP.

(En las FAQ's del foro hay otro ejemplo completo con opción "resume" .. y si buscas por el foro por "content-type" seguro que te salen más alternativas con diferentes cabeceras HTTP)

Un saludo,
header("Content-disposition: inline ;filename=arch.pdf");
  #12 (permalink)  
Antiguo 07/11/2003, 07:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Content-disposition: attachment
ó
Content-disposition: inline

O .. muchas más que hay depende mucho del navegador que se use e incluso la versión .. El eterno problema nunca se ponen deacuerdo para seguir los standars .. Si todos cumpliesen lo que dicen los RFC's correspondientes del protocolo HTTP .. mmm

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 07/11/2003, 07:30
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
No sabía que se usaba una u otra dependiendo de ciertas características.... Pensaba que según si lo quieres visualizar o descargar usabas una u otra y como el problema que planteaba era que le descarba la pagina php pensé que era inline lo que debía poner en vez de attachment...

Aunque, a mi me pasó una vez justo eso, pero con asp y el problema era, si no recuerdo mal, que en el atributo filename tenía puesto una url relativa y lo cambié por el nombre del fichero sólo y se solucionó abriéndomelo directamente en el navegador

Un beso
  #14 (permalink)  
Antiguo 07/11/2003, 07:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En teoria el "attachment" lo debería entregar a "descarga" el archivo .. el el "inline" al navegador .. Pero no todos se comportan igual con esas cabeceras (ejemplo IE5.5 tiene por ahí un "bug" conocido sobre eso) ..

Los "códigos" más eficientes para que siempre se descargue el archivo (independiente del navegador usado) suelen ver eso mismo, "que navegador usa el cliente" antes de "tirarle" la cabecera "Content-type" adecuada .. Por ejeplo el fomoso phpMyadmin lo hace así. Si lo tienes a mano, hechale un vistazo a su código y veras que empieza a ver que navegador usa el cliente, que versión .. y de ahí va formando las cebeceras que mejor le van para el navegador en concreto que se use.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 18/11/2003, 12:55
Avatar de CarlosMtnez  
Fecha de Ingreso: agosto-2003
Mensajes: 68
Antigüedad: 14 años, 3 meses
Puntos: 1
¿Habéis comprobado que al incluir el nombre del fichero al descargar si lleva dos "puntos" os pone "[1]" antes del primero que encuentre en el Internet Explorer? Por ejemplo:

Si le decimos en la cabecera que el fichero a descargar se llama pepito.tar.gz al ejecutar la descarga desde el propio Explorer deja el nombre como pepito[1].tar.gz

¿Conocéis cómo enviar las cabeceras para que no ocurra?
Yo he bajado bastantes veces con el explorer ficheros de varias webs y no ocurría eso

Saludos!
  #16 (permalink)  
Antiguo 18/11/2003, 13:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm .. tal vez le pasen un urlencode() ? ... a la variable que contiene el nombre del archivo (a la hora de generar la cabecera HTTP) .. Pruebalo y nos comentas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 18/11/2003, 16:06
Avatar de CarlosMtnez  
Fecha de Ingreso: agosto-2003
Mensajes: 68
Antigüedad: 14 años, 3 meses
Puntos: 1
Hola Cluster:

Gracias por tu contestación, pero ése no es el problema, he probado bastantes cosas, incluso en la cabecera dándole yo el nombre a mano: "pepe.tar.gz" y lo continúa haciendo únicamente en el Internet Explorer, en el FireBird funciona perfectamente.

Gracias de nuevo
Saludos!
  #18 (permalink)  
Antiguo 18/11/2003, 16:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Jeje .. pues entonces habrá que preguntarle al Sr. Bill Gates que hizo ahí xDD con su IE.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 18/11/2003, 17:10
Avatar de CarlosMtnez  
Fecha de Ingreso: agosto-2003
Mensajes: 68
Antigüedad: 14 años, 3 meses
Puntos: 1
Tendré que investigarlo, pero he visto páginas donde con el explorer se pueden descargar ficheros con "varios puntos" sin que ocurra esto.

Pero vamos, ya me lo miraré. Gracias por tus respuestas.
Saludos!
  #20 (permalink)  
Antiguo 18/11/2003, 18:21
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿Que cabeceras envias exactamente? Porque segun http://www.w3c.org/Protocols/rfc2616...9.html#sec19.5 : el nombre del fichero debe ser un quoted-string, una cadena entre comillas. Asi que tendria que ser:
Código PHP:
header("Content-disposition: attachment;filename=\"arch.pdf\""); 
Aunque eso es solo lo que dice el standard (la teoria). Y como se dice por ahi, "En teoria, no hay diferencia entre la teoria y la practica. En la practica si la hay".

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #21 (permalink)  
Antiguo 18/11/2003, 19:26
Avatar de CarlosMtnez  
Fecha de Ingreso: agosto-2003
Mensajes: 68
Antigüedad: 14 años, 3 meses
Puntos: 1
Sí, exactamente así envío esa cabecera... el problema es un poco extraño...

Gracias por tu respuesta
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:10.