У меня есть приложение, в котором я создаю / генерирую PDF на данных, полученных со стороны клиента. Когда генерируется PDF, я отправляю эти PDF-файлы на нужные электронные письма и создаю кнопку загрузки, чтобы клиент мог также загрузить этот файл.
Проблема в том, что отправка писем занимает около 10-15 секунд, а может и больше, прежде чем я смогу создать кнопку загрузки.
Есть ли способ, которым я могу поместить этот процесс отправки электронной почты в фоновом режиме, так что я могу перейти непосредственно к части загрузки кода, вместо того, чтобы ждать, пока почтовая программа выполнит все трюки.
$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. На самом деле я бы посоветовал не использовать pcntl из apache SAPI в любом случае — вы можете порождать экземпляр PHP без разветвления pcntl из apache SAPI, используя shell_exec
и есть некоторые хорошие обертки, чтобы помочь с этим, как cocur.
Очередь через базу данных будет работать нормально, и это очень просто, если вы уже используете БД. В противном случае я рекомендую beanstalkd а также pheanstalk поговорить с ним. Затем запустите процесс отправки из cron или как демон.
Почему бы вам не сдвинуть его вниз и вывести свой JSON? Очистите свои буферы тоже.