PHP - Generando PDF

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 24 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generando PDF

Publicado por Javier (49 intervenciones) el 16/09/2013 20:38:48
Buenas tardes.
He generado un fichero pdf con FPDF y lo he alojado en el mismo directorio que el programa php que lo llama.
Una vez creado lo quiero descargar a mi pc con esta sequencia de comandos que se encuentran en el mismo php que lo genera:

...
$len = filesize('prueba0.pdf');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="prueba0.pdf');
header('Content-Length: '.$len);
readfile('prueba0.pdf');
...

Resulta que primero me muestra unos warning que son:

Warning: Cannot modify header information - headers already sent by (output started at ../formulario/abreadol.php:22) in../formulario/report_caja.php on line 105

Warning: Cannot modify header information - headers already sent by (output started at ..l/formulario/abreadol.php:22) in../formulario/report_caja.php on line 106

Warning: Cannot modify header information - headers already sent by (output started at ../formulario/abreadol.php:22) in ../formulario/report_caja.php on line 107

%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream xœ˜ÁŽ«6†÷÷)β•<°1†îœ„ä˜ d¤fS1 w”*nI¦•î®ÐE¡Ë.úy±šà Ì€)å öÿ °üd`ÆáO¿³±í‚!ÿêÿˆƒ)nÌl_àÞ7aVÀ—O“îç&˜ ¤_ÁK«¯±1w»v8¤;ø!ØŸÎÙ®€]ûãi[îÏÅéGHU\Ç0ލAMlÊ!,9¥yBìŠCëÅ Áv=ÈW‹Ë ©Üt±C¯<úºßî³C~ê b».v]ý zÎ(¶ˆä›ìʧÙ.?çÝ8ÇÔ˜AËÕ _ŠGß‹Qê-ÅLÀÜ‹Cμ ‚ÏêÙX¦aXa[xyÊNH®–|KPˆÀä]y¶Q©ÐËÓr%OËm 3Öæ^û_Ö1ƒEnDÐ#žº½›JõÉ·r<#÷ÇJ~"åÛ]ù–¯åJ¾–+ù Èž ‹ç׼̤ä㹊k7ôÖU½ŠýúX¼Å¾G¼Ü+¤7¹7llÕɵ|ý=?î»›€9r“ø×óÚ¿ž×þ[|%bÄ­Ö—¿£ Äþ£G2½(u*Ì&í¨õ«BÀºúmwX¿–+ýZ®ô7\þÔhuù3^E,D<½ü%ºúMÆí»t:nû0&‹ÔÀ2J0·êøe§s^í ‚I°;-WAÐr„†û‰˜xJ¼8a$×pZ¯àMœŠåãÐrv ¨ž×Úõ¼ÖÞâS¯¼=x³X&|qêAG?µ ê×HFàΰ-W´\hø²8å ŽÏùÅÙKq‚¸xÉŽ×Ò‰¿ãŒ”o›Øqäk¹’¯åJ~Ãò]Y EVn/ÿe0
......


Y mostrandome este texto en vez de pedirme autorizacion para descargarlo.
¿Que me falta para poder descargarlo desde esa carpeta?.


Gracias.
Javier.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Generando PDF

Publicado por xve (6935 intervenciones) el 16/09/2013 21:50:29
Hola Javier los Warning de :
Cannot modify header information son porque ya has mostrado algo en el navegador y no puede modificar ya la cabecera del mismo...

Si por ejemplo, tu código esta dentro del tag <html> ya te aparecerá ese Warning, o si por ejemplos, hay un echo "texto"

No tienes que mostrar nada antes de tu código.

Si nos muestras el archivo entero, intentare indicarte que puede ser.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose maria
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Generando PDF

Publicado por Jose maria (29 intervenciones) el 16/09/2013 22:46:08
Hola Javier :

Desde mi reciente experiencia en el tema, puedo indicarte dos cosas sobre los mensajes que te envía:

-Por una parte, como te indica xve, los Warning se producen porque tu página ya tiene su cabecera y, para la descarga estamos poniendo otras.
La solución para ello es montar el php de descarga en otra página, que, bien estructurada, ni se abrirá en el navegador: tan solo la ventana de lo que quieres descargar.
En mi caso, el enlace lo hago por GET. Por ejemplo, desde tu página desde la que quieres ordenar la descarga del archivo, indico qué archivo se ha de descargar:
1
<a href="descarga.php?archivo='.$filename.'"><button name="descargar_archivo">Descargar archivo:</button></a>

En descarga,php y gracias a $_GET["archivo"] defino el documento a descargar y, si procede, completo la ruta.

- La segunda parte, no es otra cosa sino cómo lee o interpreta, en tu caso el pdf, el navegador. Si se tratase de una imagen, simplemente la mostraría en la página descarga.php (o como la hayas llamado).
La secuencia para obligar a la descarga y pedir la autorización correspondiente se realiza a través del búfer de salida

Tienes un excelente ejemplo de código en http://php.net/manual/es/function.readfile.php

Para entenderlo, en el manual de php puedes revisar
readfile()
ob_clean()
flush()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar