我正在检查一个用原始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中的问题。
答案 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>