4

顧客に注文の領収書を送信するこのスクリプトを作成しましたが、問題があります。

PDFスクリプトを待ちません。

したがって、PDFスクリプトが必要なだけで、PDFスクリプトがまだPDFで機能している間に、実行を開始してメールを送信します。電子メールスクリプトを遅らせる方法があると確信していますが、事態をより複雑にするために:

order.php全体がjqueryajax呼び出しで実行され、スクリプトはphpが終了するのを待ってから、要求が成功したことをブラウザーに報告します。したがって、クライアントがなぜこれほど時間がかかるのか疑問に思う間、5分以上待つことができます。

そのため、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 集中型アクティビティ) では、通常、2 つの cronjobs を持つキューを使用します。最初の cronjobs は pdf ファイルを生成し、データベース テーブルで準備完了としてマークします。2 番目の cronjob は、データベースにクエリを実行して、pdf が「準備完了」ステータスにあるかどうかを確認し、添付ファイル付きの電子メールを送信します。

このようにすると、最良のシナリオではキューが空になります。すべての領収書は準備が整うとすぐに送信されます。最悪の場合、システムは PDF キューが空になるまですべての電子メールの送信を増やします。

このアプローチが明確であることを願っています。ここで、PHPデーモンに関するいくつかのリファレンスを見つけることができます(通常のPHPスクリプトよりもジョブを管理するためのより良い方法です) 。

于 2012-09-07T15:35:52.153 に答える