1

やあまた会ったね!最後に実行してから 15 分以上経過している場合にのみページで実行される一連のスクリプトを作成しようとしています。基本的に、私のデータベースは自動化されたスクリプトによって 30 分ごとに更新されます。また、その情報を表示し、セッション変数を更新するページは、データベースを開くたびにクエリを実行する必要があります。

したがって、クエリを最小限に抑えながらも安全を確保するために、セッション変数は、そのページが最後に表示されてから 15 分以上経過している場合にのみデータベースから更新されると考えました。私はいくつかのコードを書きましたが、実装する前に皆さんがそれを見てくれることを望んでいましたか?

if(!isset($_SESSION['time_next'])){

    $_SESSION['time_next'] = time() + (15 * 60);
                                     //15 minutes   
}
else if(time() >= $_SESSION['time_next']){

    //update all the session variables, etc...

    $_SESSION['time_next'] = time() + (15 * 60);    
}

どう思いますか?これは機能しますか?

4

2 に答える 2

1

それはうまくいきますが、短くてきれいに書くことができます*。セッションはビジター バウンドであることに注意してください。そのため、10 人がページをリクエストすると、更新を実行する 10 のインスタンスが取得されます。

do_update_if_needed(15);

function do_update_if_needed($minutes)
{
    if ( isset($_SESSION['time_next']) && time() < $_SESSION['time_next'] ) return;

    // either time_next was not set, or it's time to update, so set next time:

    $_SESSION['time_next'] = time() + $minutes*60;

    // do your thing!
}

最終時刻を含む (または最終更新時刻を使用して) シンプルなファイルを作成することもできます。一般的には、次回よりも前回を記録する方がよいと思います。なぜなら、前回は、単なる「計画」ではなく、実際に起こったことを伝えるからです (これは、誰の計画だったのか? なぜ? などの質問につながります. )

*クリーナーとは、1) 関数に入れ、2) 計算を 2 つの分岐ではなく 1 か所で行うことを指します。if

于 2010-08-19T22:27:22.450 に答える
0

あなたはおそらくDAEMONSこの種のもののために作成したいと思うでしょう。

他の人がよりよく説明しているので、あなたは間違いなくあなたが向かっている道を行くべきではありません。

また、 cronを使用しないでください。プロセスにかかる時間よりも長くかかると、他のプロセスが上書きされるためです。それはあなたのアプリを混乱させる可能性があり、それは本当にエレガントな解決策ではありません。

Adeamonはバックグラウンドでサイレントに実行されます。必要なすべての作業負荷を処理し、それ自体を上書きせず、事前に設定された時間で実行することもできます。

KevinvanZonneveldによるこの優れたチュートリアルをご覧ください

于 2010-08-19T22:40:12.640 に答える