创建pdf后进行清理


Clean up after creating the pdf

我正在用html2fpdf生成一个pdf文件。

$pdf = new HTML2FPDF();
$pdf->HTML2FPDF("P","mm","A4");
$pdf->AddPage();
$pdf->WriteHTML($html);
$pdf->output('sample.pdf');

这个示例非常有效。但是:

输出后如何删除pdf?我只想在我的工具中有链接,用户可以下载pdf,然后在服务器上删除它。

生成pdf后如何"清理"?

您可以使用名为unlink() 的PHP文件删除函数

使用生成的PDF文件(或任何文件)的完整路径调用此函数,PHP将删除该文件。

http://php.net/manual/en/function.unlink.php


用户下载文件后,你不一定要立即删除它。你可以很容易地将所有生成的文件放在一个中心文件夹中,让cron作业执行一个更通用的清理脚本,只需删除旧文件。

一种方法可能是

  • 使用scandir()扫描文件夹的内容
  • foreach循环中对其文件进行迭代
  • 使用filemtime()检查每个文件的创建时间
  • 如果创建时间超过一小时,请使用unlink()删除该文件

因为您是在您的PHP代码中自己生成PDF文件的,所以我没有提到权限方面的考虑。这里有一个很好的地方可以提到,您的PHP必须具有正确的文件系统权限,才能对文件系统执行任何操作。您正在创建一个PDF文件,因此可以放心地假设您具有对文件系统进行更改的正确权限,但如果您计划在其他脚本中使用此unlink()函数,请确保您正在处理的文件具有正确的权限集。

如果不将'F'标志添加到输出函数,则服务器上根本不会存储pdf文件:

$pdf->output('sample.pdf', 'F'); //stores PDF on server

在您的情况下,脚本本身的行为就像一个实际的pdf文件。因此,创建脚本链接就像创建pdf链接一样,只是每次请求脚本时都会创建pdf。要告诉浏览器这是PDF,必须将content-type响应标头设置为application/pdf:

content-type: application/pdf

这样,即使URL以.php结尾,浏览器也知道它是pdf。您可以使用重写引擎使其以pdf或其他格式结束。

发送头是由fpdf/tcpdf完成的。简而言之:你不需要做任何清理,因为服务器上没有存储pdf文件。

如果你想知道这个名字是什么意思,试着保存pdf文件。保存时推荐的名称将是sample.pdf。

参考

  • PHP header()函数,在示例中有一个用于发送pdf
  • FPDF::Output()
  • TCPDF::Output()