在作为电子邮件附件发送之前验证PDF

时间:2010-09-17 22:42:42

标签: php fpdf

我正在使用FDPF为客户生成发票,然后将其附加到电子邮件中并发送给客户。发票/电子邮件是批量生成的(一次几百个)。在该批次的第一次实际运行中,少数(约200个)客户收到了损坏的PDF。它们之间的共同点是,它们的发票数量大于平均值,这使我相信生成发票所需的时间导致竞争条件,并且可能在PDF有时间完成生成之前发送电子邮件完全。有没有办法在发送电子邮件之前验证PDF是否已损坏?还是有另一种方法可以解决我忽略的问题吗?

2 个答案:

答案 0 :(得分:0)

您可以通过在首次发送文件时为pdf创建md5哈希值来测试pdf是否完全生成,然后在电子邮件发送时再次创建,以及最后在发送之后再次创建。如果md5每次都更改,那么当电子邮件发送时,pdf生成器仍然会创建该文件。

以下是有关如何使用md5哈希的示例:

<?php

$file_name = 'md5_demonstration_file';


    $file_changer = 0;

    while($file_changer < 10)
    {
     file_put_contents($file_name, $file_changer);
     echo md5_file ($file_name) . '</br>';
     $file_changer++;
    }

    ?>

您会注意到md5哈希在函数的每次迭代中都会发生变化,因为文件仍在被写入。如果您尝试此示例代码,则可能必须手动设置“md5_demonstration_file”的权限,以便任何人都可以写入。

如果竞争条件不是问题你是否已经阅读了这个SO建议帖子:Corrupt PDF email attachment when generated by FPDF and PHP

答案 1 :(得分:0)

请注意,最新版本的Acrobat阅读器对于阅读不完全符合正确pdf格式的文件非常麻烦。

pdf文档的开头由字符串%PDF表示。较旧版本的Acrobat会忽略%PDF标记之前发生的文件内容。例如,您可能在文件中留下了一些调试输出,如下所示:

debug line 1
debug line 2
%PDF-1.4
3 0 obj
<</Type /Page
etc.

并且Acrobat会打开它,(就像在OSX上预览一样)。

Acrobat再也不会接受了。

我被那个咬了,所以希望这会有所帮助!