如何使FPDF生成的pdf不可缓存?

时间:2011-03-28 10:39:37

标签: php continuous-integration fpdf cache-control

我正在检查一个用原始php编写的应用程序,没有任何框架。在模块中,使用FPDF生成报告并且工作正常,除了pdfs被缓存。生成例程的原始调用是

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

tr_inci_print.php使用存储在会话中的2个参数,年和月。我已将代码更改为

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

部分解决了问题,因为每个月都会有URI变化。但是,如果数据在外部发生变化且浏览器仍在原始页面中,则重新调用该链接会生成未更新的pdf。

有什么方法可以更改$ FPDF-&gt; output()以使pdf不可缓存?

------部分解决方案-------------------

关注oezi,改变了:

$oPdf->output()

$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;

解决了Chrome和IE中的问题,但没有解决FireFox 4中的问题。

2 个答案:

答案 0 :(得分:2)

您只需设置标题即可实现此目的,只需将以下几行添加到tr_inci_print.php

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");   // any date in the past

编辑:请务必在致电output()之前添加

答案 1 :(得分:1)

尝试:

<a href="tr_inci_print.php?t=<?php echo time(); ?>" target="_new">Print</a>

编辑:添加Javascript以确保pdf是新鲜的,即使不重新加载主页:

<a href="tr_inci_print.php?t=<?php echo time(); ?>"
   onclick="document.location.href='tr_inci_print.php?t='+new Date().getTime(); return false;" >
  Print
</a>