继续执行脚本,而无需等待PHP返回



我有一个应用程序,可以在其中从客户端检索到的数据上创建/生成PDF。生成PDF后,我将这些PDF发送到所需的电子邮件并创建下载按钮,因此客户也可以下载该文件。问题在于,在我可以创建下载按钮之前,发送邮件需要大约10-15秒,甚至更多。有什么方法可以将电子邮件发送过程放在后台,因此我可以直接跳到代码的下载部分,而不是等待Mailer来完成所有技巧。

$name = md5(time());
$pdfoutput = $in->_config["path"] . '/PDFs/' . $name . '.pdf';
$mpdf->Output( $pdfoutput,'F' );
$subject = "Offer";
$body["html"] = "<b>Offer in html</b>";
$body["text"] = "Offer as text";
$files = array($pdfoutput);
$addresses = array("*******@hotmail.com");
// PROBLEMATIC PART
$mail->createEmails($addresses, $subject, $body, $files); // i want this proces to go in background
$pdfurl = $in->_config["url"] . "PDFs/" . $name . ".pdf";
return json_encode(array("status" => "ok", "reason" => "PDF CREATED!", "pdffile" => $pdfurl));
PHP Fatal error: Call to undefined function pcntl_fork() 

这只是意味着您尚未安装/启用PCNTL扩展名。实际上,我建议不要使用Apache SAPI中使用PCNTL-您可以使用shell_exec从Apache SAPI分叉出现PHP实例,并且有一些不错的包装器可以帮助Cocur。

通过数据库排队可以正常工作,如果您已经使用了数据库,则非常容易。否则,我建议Beanstalkd和Pheanstalk与之交谈。然后从Cron或守护程序运行发送过程。

为什么不向下移动它并输出JSON?也冲洗缓冲区。

http://php.net/manual/en/function.ignore-user-abort.php

最新更新