以下はおそらく動作しますが、crontabを持つシステムが必要です(タスクスケジューラを使用してWindowsで動作するが、構文は異なります)。ユーザーはタイマーがこのテーブルに追加作成すると
UserTimers
----------
user_id | timer_id | trigger_time
:
は、テーブルを作成します。
#!/usr/bin/php
<?php
$rows = mysqli_query("SELECT * FROM UserTimers WHERE trigger_time <= NOW()"); // Timer should have been triggered by now
//Get all rows and do whatever you need to do with them
mysqli_query("DELETE FROM UserTimers WHERE trigger_time <= NOW()");
があなたのcrontabに以下の行を追加します(それが/etc/cronmgr
で保存されていると言う)実行可能なPHPスクリプトを作成します。
*/2 * * * * /etc/cronmgr
これは、2分ごとにあなたのcronmgrスクリプトを実行します(あれば調整あまりにも多くのサーバー負荷がかかると思います)。
しかし、ユーザーのタイマーはX分(この例ではXは間隔です)にある場合があります。そのため、ユーザーが1分のタイマーを要求すると、それはうまくいかないでしょう。
PHPはリクエストがあった場合にのみ実行されます。しかし、これを実行することでまだ実行中であるという事実をシミュレートすることができます。ユーザーは12時間のタイマーを設定します。これは12時間で何時ですか?それを保存します。次にユーザーが戻ったときに、この時間までの残りの時間を表示します。 – blex
ローカルストレージでこれを行い、@blexで説明したのと同じ方法でカウントダウンをシミュレートすることもできます。または、アクティブ化時間を設定して(localStorageまたはDbに保存して)、ページの読み込み時にアクティブ化時間と現在の時間を取得します。アクティブ化と現在の時間の差を計算してカウントダウンをシミュレートします。このためにセッション記憶域を使用することはできません。 – gavgrif
ユーザーが今から12時間タイマーを設定したとします。その後、ユーザーはログオフしてコンピュータをシャットダウンし、スリープ状態になります。 12時間後にはどうなるでしょうか? – apokryfos