ホームページ >バックエンド開発 >PHPチュートリアル >PHPでのメールの非同期送信に関する問題
要件:
あるシステムでは、製品のパッチファイルをアップロードしたり、製品の更新情報を公開したりした後、製品を使用するユーザー(多数のユーザー)にメールを送信する必要があります。 、送信 プロンプトが送信されたら!よく使用される PHP コードは次のように記述されます。
<p><?php</p>// ......<br />//查找出所有使用该产品的用户email地址,假设存放在$email数组中 <br />for($i=0;$i<count($email);$i++){<br /> sendemail();<br />}<br />function sendemail(){<br /> //发送邮件代码 <br />}<br /><p>//......</p>
今回は 100 通のメールが送信されると仮定します。この操作の結果はどうなりますか? ユーザー エクスペリエンス: ユーザーは待機します -> 電子メールの送信が完了します -> 情報を返します (この操作では、大量のメールの送信が必要になる可能性が高くなります)。電子メールの数、結果として PHP の実行時間が長すぎると、ユーザーは待つのにイライラするでしょう。
Apache または nginx が許容実行時間を超えて待機すると、タイムアウト エラーが返されます。
現時点では、操作が成功したかどうか、また送信されたメールの数はユーザーにはわかりません。このことから、上記のコードのユーザー エクスペリエンスは非常に悪く、タスクを正常に完了できないことがわかります。
それでは、ユーザー エクスペリエンスが低いというこの問題をどのように解決すればよいでしょうか?
ここで非同期実行という概念について説明します
ユーザー エクスペリエンス: ユーザーは待機します -> 完了した友達を送信しますなぜ手紙を送信するためのリンクが欠落しているのかと尋ねるでしょう。
OK、ユーザーがリクエストを送信すると、電子メール タスクは電子メールを個別に処理する PHP プログラムに転送されます。ユーザーに「送信完了」と表示された時点では、レターは送信されていません。現時点では、送信プログラムがバックグラウンドで懸命に動作し、文字を 1 つずつ送信しています。
<p><?php </p>$domain="www.scutephp.com";<br />$url="/sendEmail.php";<br />$par="email=1@163.com,2@163.com,3@163.com&time=".time();<br />$header="POST $url HTTP/1.0\r\n";<br />$header.="Content-Type: application/x-www-form-urlencoded\r\n";<br />$header.="Content-Length: ".strlen($par)."\r\n\r\n";<br />$fp=@fsockopen ($domain,80,$errno,$errstr,30);<br />fputs($fp,$header.$par);<br />fclose($fp);<br />echo '发送完毕';