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();

?>

PDF script

1 4

1 ответ:

В вашем случае (и в большинстве интенсивных операций процессора) я обычно использую очередь с двумя cronjob: первый генерирует pdf-файлы и помечает их как готовые в таблице базы данных. 2-й cronjob запросит базу данных, чтобы проверить, находится ли pdf-файл в состоянии "готов", а затем отправит электронное письмо с вложением.

Таким образом, в лучшем случае у вас будет пустая очередь: все квитанции отправляются, как только они будут готовы, в худшем случае система будет наращивать отправку всех письма, пока очередь PDF не опустеет.

Надеюсь, что этот подход понятен. Вы можете найти некоторые ссылки на PHP-демонов (ИМХО лучший способ управления заданиями, чем обычный PHP-скрипт) здесь .