0

電子メールでユーザーにアラートを送信するアプリケーションに取り組んでいます。ユーザーは時間枠を選択し、その時間枠で受信するアラートをいくつでも設定できます。

目標は、アラートを等間隔で送信することです。

たとえば、ユーザーが 12 時間にわたって 8 つのアラートを設定したとします (これは毎日繰り返されます)。単純な割り算を使用して、8 つのアラートを 1 つずつ送信する時間間隔を決定します。12 時間/8 アラート = 1 時間 30 分の間隔。コードは 1 時間 30 分ごとに 8 回実行する必要があります。

このアルゴリズムを作成するには、どの PHP 関数を使用できますか? お知らせ下さい。

4

2 に答える 2

2

袖口から、これがロジックです。何か不足していない限り、開始時刻、終了時刻、および最後のメッセージをタイムスタンプとしてデータベースに保存することで実行できます。

$start = 0;
$end = 12;
$number_msgs = 8;
$interval = ($end - $start)/$number_msgs;

$now = time();
$last_msg =  ; // last msg timestamp from db
if($now - $last_msg > $interval){
    //send email
}

上記のコードは、間隔 (上記の時間数) を秒数 (秒数time()であるため) に変換するために、いくつかの調整が必要です。

これが役に立つことを願っています。

于 2012-05-20T01:34:41.627 に答える
2

cronまたは同様のものを使用したほうがよいと思います。デフォルトでは、PHP は 30 秒後にスクリプトの実行を停止します。ホストされた Web プロバイダーを使用している場合、これは多くの場合交渉の余地がありません。

一部の人々がローカルで実行される「コンソール」タイプのアプリケーションを作成することは認めますが (たとえば、コマンド ラインを介して)、これを行っているとは言わなかったので、そうではないと想定しても安全だと思います。場合。

使用方法の 1 つはcron次のとおりです。ユーザーに時間間隔を指定してもらい、それをデータベースに保存します。次に、別の間隔 (おそらく 1 分ごと、または 5 分ごと) でデータベースをチェックして、最後に電子メールを送信した時間が要求された間隔よりも長いかどうかを確認します。そうである場合は、別の電子メールを送信して、データベース内の「最終送信時間」の値を更新します。

しかし、PHP スクリプトを「スリープ」させたり、さらに悪いことに、無限の while ループでロックしたりすることは、システムのリソースを適切に使用していません。

于 2012-05-20T01:55:23.560 に答える