PHP ждать, пока PDF будет создан, а затем отправить его по почте?
Я написал этот скрипт, который отправляет клиенту квитанцию о получении заказа, но у него есть проблема:
Он не будет ждать сценария PDF.
Таким образом, он просто требует PDF-скрипт, и начинает выполнять его и отправляет почту, пока PDF-скрипт все еще работает над PDF. Я уверен, что есть способ задержать сценарий электронной почты, но сделать его более сложным:
Весь Орден.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();
?>
1 ответ:
В вашем случае (и в большинстве интенсивных операций процессора) я обычно использую очередь с двумя cronjob: первый генерирует pdf-файлы и помечает их как готовые в таблице базы данных. 2-й cronjob запросит базу данных, чтобы проверить, находится ли pdf-файл в состоянии "готов", а затем отправит электронное письмо с вложением.
Таким образом, в лучшем случае у вас будет пустая очередь: все квитанции отправляются, как только они будут готовы, в худшем случае система будет наращивать отправку всех письма, пока очередь PDF не опустеет.
Надеюсь, что этот подход понятен. Вы можете найти некоторые ссылки на PHP-демонов (ИМХО лучший способ управления заданиями, чем обычный PHP-скрипт) здесь .