Evitar cache de pdf generados

659 views
Skip to first unread message

Carlos Mora

unread,
Mar 28, 2011, 4:35:41 AM3/28/11
to codeignit...@googlegroups.com
Estoy trabajando en una aplicación que voy migrando por partes a CI, y
he encontrado un problema cuando genero pdfs. La rutina que genera los
pdfs usa FPDF y lo hace bastante bien, usa 2 parámetros (mes y año)
que están guardados en la sesión, y es llamada con una simple
invocación :

<a href="tr_inci_print.php" target="_new">Imprimir</a>

El pdf se retorna con
$oPdf->Output();
en línea, usando la funcionalidad de la propia FPDF.

El problema está en que aunque cambie el mes y el año, me sigue
trayendo el pdf que tiene en caché porque la URI no ha cambiado. probé
añadiendo:

<a href="tr_inci_print.php?anio=<?php echo $anio; ?>&mes=<?php echo
$mes; ?>" target="_new">Imprimir</a>

con lo que parcialmente el caché se renueva pq cambia la URI mes a
mes, pero si los datos cambiaron y le vuelvo a dar a imprimir sigue
trayendome en pdf de caché y no me genera uno nuevo.

Como puedo hacer que el $oPdf->Output() ponga que el pdf no es cacheable?

Juanmy

unread,
Mar 28, 2011, 5:48:44 AM3/28/11
to codeignit...@googlegroups.com
Pásales otro parámeto que sea aleatorio, o bien p.e. time() para que cambie siempre.

Fásiko

unread,
Mar 28, 2011, 5:52:34 AM3/28/11
to codeignit...@googlegroups.com
Como dice juanmy, lo suyo es que le añadas un aleatorio en el nombre del pdf.

Hace tiempo tuve un problema parecido y buscando dí con un código de cabecera para que se omitiese la caché (bueno más bien para indicar que la caché no era válida pasado 1 segundo) pero me encontré con que algunos navegadores y visores de pdf ignoraban dicha cabecera por lo que el método de cambiarle el nombre fue el más efectivo.

Saludos....

--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

Carlos Mora

unread,
Mar 28, 2011, 6:19:42 AM3/28/11
to codeignit...@googlegroups.com
Juanmi, Fasiko,

gracias, es lo que habia pensado. Estaba buscando una forma más
'elegante' por llamarlo de alguna manera, además de que como el pdf se
abre en una ventana nueva, el link original no cambia si no se
actualiza la propia página, con lo que el id aleatorio, no cambiaría
hasta que no refresque.

Seguiremos en la búsqueda, gracias por las ideas.

Juanmy

unread,
Mar 28, 2011, 6:25:05 AM3/28/11
to codeignit...@googlegroups.com
Pues intenta cambiar el nombre del archivo, p.e. factura_nosque.pdf, siendo el noseque el valor aleatorio, es como por ejemplo hacen en algunos repositorios cuando te descargas archivos.

Fásiko

unread,
Mar 28, 2011, 6:38:01 AM3/28/11
to codeignit...@googlegroups.com
ahora que caigo, tienes la opción de poner una llamada en la url del tipo:

Así sigues teniendo el mismo nombre de archivo pero con una url distinta. Eso sí, si intenta guardar el pdf lo mismo te pone en el nombre igual y ya la hemos liado, así que tienes la opción de meterle el código antes de forma que quede algo así:


Saludos...

Carlos Mora

unread,
Apr 6, 2011, 5:18:02 AM4/6/11
to codeignit...@googlegroups.com
Juanmi, Fasiko,

gracias por las ideas. La solución ha venido un poco más compleja.
Tened en cuenta que el pdf lo devuelvo online, sin nombre.
Hice la pregunta en stackoverflow[1] y surgieron algunas alternativas,
finalmente reescribiendo la parte que usa el método output para
cambiar el header.

$buffer=$oPdf->Output('','S');

header('Content-Type: application/pdf');
header('Content-Length: '.strlen($buffer));
header('Content-Disposition: inline; filename="doc.pdf"');
header("Cache-Control: no-cache, must-revalidate, max-age=1"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // any date in the past
header('Pragma: public');
ini_set('zlib.output_compression','0');
echo $buffer;

Lo pongo porque tal vez le pueda resultar útil a algún compañero.

Un saludo y perdón por la demora en la respuesta.

[1] http://stackoverflow.com/questions/5457773/how-to-make-an-fpdfs-generated-pdf-non-cacheable

Reply all
Reply to author
Forward
0 new messages