4

我编写了这个脚本,向客户发送他们的订单收据,但它有一个问题:

它不会等待 PDF 脚本。

所以它只需要 PDF 脚本,并在 PDF 脚本仍在处理 PDF 时开始执行它并发送邮件。我确信有一种方法可以延迟电子邮件脚本,但会使事情变得更复杂:

整个 order.php 使用 jquery ajax 调用执行,脚本将等待 php 完成,然后报告浏览器请求成功。所以它可能会等待超过五分钟,而客户会想知道为什么要花这么长时间。

所以我需要它等待 PDF 被创建然后发送邮件,但它不应该让客户等待。

这是我的代码:

<?php 
    $addid = "orderid.txt";
    $current = file_get_contents($addid) + 1;
    echo $current;
    file_put_contents($addid, $current);
?>
<?php
// Lue tilauksen ID sähköpostia varten
$orderid = "orderid.txt";
$ordernumber = file_get_contents($orderid);

// Kirjoita kuitti
require('receipt.php');
?>
<?php   
//Lähetä tilausvahvistus
require_once('mail/class.phpmailer.php');
$path = "kuitit/kuitti".$orderid.".pdf";
$bodytext = '
Olemme vastaanottaneet tilauksenne '. $ordernumber .'. 
Tilaamanne tuotteet löytyvät liitteestä.'
  ;
$email = new PHPMailer();
$email->From      = 'no-reply@coverlinefilms.fi';
$email->FromName  = 'no-reply@coverlinefilms.fi';
$email->Subject   = 'Olemme vastaanottaneet tilauksenne ' . $ordernumber;
$email->Body      = $bodytext;
$email->AddAddress('christian.nikkanen@gmail.com');
$email->AddAttachment($path, 'kuitti777.pdf');
return $email->Send();

?>

PDF 脚本

4

1 回答 1

0

在您的情况下(以及在大多数 CPU 密集型活动中),我通常使用带有两个 cronjobs 的队列:第一个将生成 pdf 文件,并在数据库表中将它们标记为就绪。第二个 cronjob 将查询数据库以检查 pdf 是否处于“就绪”状态,然后发送带有附件的电子邮件。

这样做,在最好的情况下,您将拥有一个空队列:所有收据在准备好后立即发送,在最坏的情况下,系统将加速发送所有电子邮件,直到 PDF 队列为空。

希望这种方法是明确的。您可以在此处找到有关 PHP 守护程序的一些参考资料(恕我直言,这是一种比普通 PHP 脚本更好的作业管理方式)。

于 2012-09-07T15:35:52.153 回答