回復パスワード システムを作成していますが、PHP を 2 時間待ってから、データベースのテーブルの特定の行を更新する必要があります。これを行うにはどうすればよいですか?
4 に答える
ユーザーの行に開始時刻を保存し、約 5 分ごとに実行される cron ジョブと、更新が必要なジョブのクエリを実行します。
または - 2 時間経過した時点で更新されているはずのデータにアクセスする必要がある場合は、その時刻を確認して 2 時間以上経過しているかどうかを確認し、更新を行ってからデータを取得します。
PHP を待たせることはありません。データベース内の回復情報に有効期限のタイムスタンプを追加し、ユーザーが実際に回復システムを通過したときにそのタイムスタンプを確認します。
SELECT ...
WHERE (expirytimestamp >= NOW() - INTERVAL 2 HOUR)
ユーザーが 2 時間の制限内に到着した場合、このクエリは関連するレコードを返し、続行できます。2 時間の制限を過ぎている場合は、回復オプションの有効期限が切れているため、「別のリセット メールを取得する」パスに転送します。
放棄された回復試行で DB を散らかしたくない場合は、標準の CRON ジョブを実行して期限切れのレコードを削除することができます。
プログラミングは、単純さが効率を意味するものの 1 つです。行を定期的に削除する方法を見つけようとすると、コードを作成する必要がある別のジョブが追加され、別の障害点が発生します。
2 時間のリセット制限を実装する最善の方法は、( time()
PHP で) テーブルにタイムスタンプ行を追加することです。次に、リカバリ スクリプトでテーブルから行を読み込むと、
if ($time < time() - 2 * 60 * 60) {
// Delete row
} else {
// Perform recovery
$time
これは、保存されたタイムスタンプであり、削除と回復のための機能があることを前提としています。ちなみに、タイムスタンプは秒単位であるため、$time < time() - 2 * 60 * 60
は保存されたタイムスタンプが現在のタイムスタンプより 2 時間少ない秒数であるかどうかをチェックします。