0

関数を再度実行する前に処理が完了したかどうかを PHP で確認する方法はありますか?

ページのロード/リロード/タイマー イベントで、終了日 (現在よりも前の日付) に基づいて DB アイテムを期限切れにする必要があるかどうかをチェックし、日付が現在よりも前の場合は、まったく同じ情報を持つレコードの複製を作成する機能がありますが、終了日に 10 日を追加します。次に、スクリプトは元のレコードのステータスを非アクティブに設定します。これは、アイテムの元のコピーを DB に保持するために必要であり、プロセスはすべてのレコードに対して続行されます。

スクリプトが同じアイテムの複数の複製を作成することがあるため、スクリプトがステータスを非アクティブに設定していないように思われ、ページがリロード/訪問されたときなどに、スクリプトの別のインスタンスが実行され、別の重複レコードが生成されます。

関数が現在実行されているかどうかを確認し、実行中の場合は新しい呼び出しを無視して、単一のインスタンスのみを実行する方法はありますか?

大変感謝します

4

3 に答える 3

3

「ミューテックス」が必要なようですね。これを使用してみるか、空のファイルをディスクに書き込んでその存在を確認し、完了したら削除するなど、共有リソースを作成して自分で実装することができます。

ただし、特定の問題に対するより良い解決策は、ページへのランダムなユーザーリクエストに依存するのではなく、データベースメンテナンススクリプトを定期的に実行するようにcronジョブを設定することです。これにより、実行頻度が低くなり、リクエストごとの処理が減ります。

于 2013-01-05T07:24:40.417 に答える
0

PHP の場合:

 $Running = false;

   function functionName() {
    if (!$Running) {
        $Running= true;

        //Your logic implementation here

        $Running= false;
     }
  }

jQuery関数とcronジョブにも同じ原則を使用できます。

于 2016-03-15T05:51:18.003 に答える
0

トライキャッチを使う

function blah() {
 try {
 }
 catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
 }
}
于 2018-07-25T01:07:49.950 に答える