0

特定のメーリング リストのすべての電子メール アドレスにメールを送信する php スクリプトを作成しています。メールは数千に上る可能性があり、スクリプト全体の実行には数時間かかることもあります。私が欲しいのは、ユーザーがメールの詳細、本文、件名などを入力してボタン/リンクを押すと、php スクリプトがバックグラウンドで実行され、ユーザーがボタン/リンクを押すとすぐにページにリダイレクトされることです。

つまり、php スクリプトはブラウザーから開始する必要がありますが、ブラウザーを閉じてもサーバー上で実行する必要があります。

または、AJAX/Javascript を使用してリダイレクトされたページに進行状況バーを表示できますが、ブラウザーを閉じても php スクリプトは実行を継続する必要があります。

4

3 に答える 3

2

PHP はこの仕事に適したツールではありません。電子メール サーバー (おそらく同じサーバー) にメーリング リストを設定し、ブラウザーから ajax を介して PHP にデータを渡すと、PHP はメールを ( 1 回だけ) メーリング リストに送信します。

電子メール ソフトウェアは、メーリング リストのすべての購読者にコピーを送信します。

これは、最も効率的な方法の 1 つです。

より多くの調査を行うのに役立ついくつかのリンク:

ただし、これはプログラミングとは何の関係もないことを覚えておいてください。他のスタック交換サイト ( unixserverfaultなど)で助けを求める必要があります。

于 2012-10-01T22:50:09.610 に答える
0

スクリプトを継続させ、ユーザーが更新してもステータスを与えるには、少し手間がかかります。

非常に簡単な方法は、2 番目の部分を削除することです。サーバー側でアクションを実行する必要があるだけの場合は、XHR (別名 ajax) を使用して、長いポーリング アプローチで進行を与えることができます。

プロセスをユーザー接続から独立させたい場合は、毎回新しい PHP インスタンスを生成する必要があります。そして、その出力をユーザーに提供する方法を見つけます。たとえば、出力をredisに保存できます。

于 2012-10-01T22:54:00.157 に答える
0

やりたいことは次のとおりです。

ボタンをクリックすると、処理スクリプトが呼び出されます。次に、処理スクリプトは、ignore_user_abortを使用してリクエストを処理し、ブラウザーが移動した後にスクリプトが停止するのを防ぎ、ヘッダーでブラウザーをリダイレクトする必要があります('Location: success.html');

<?php
  ignore_user_abort(true);
  header('Location: success.html');
  echo 'Making sure the header gets flushed';
  flush();

  //Send out the mails
?>

ただし、スクリプトに対してアクティブな出力バッファリングがないことを確認する必要があります。圧縮モジュールなどを使用している場合、コンテンツを配信する前にプロセス全体が完了するのを待って、全体をフリーズさせる可能性があります。最適な方法は、スクリプト URL の出力バッファリングを無効にすることです。

これは、PHP でデーモンを作成する方法に似ています。

于 2012-10-03T09:33:30.577 に答える