2016-04-07 3 views
0

現時点では、単純なサインアップとログインPHPシステムがあります。 私は自分の個人用に設定できるタイマーを達成したい私は彼らが12時間のような何かに入力することができるかどうか疑問に思っていた、そして、タイマーが尽きるまでカウントダウンし、彼らは再びそれを始めることができた、私はタイマーがページを持っていなくてもロードされたので、私はそれがmySQLデータベースに格納される必要があると思っていた、私はこれで大きな困難を抱えていると私はあまりにも多くを求めていない願っています。ユーザーがページにいなくてもタイマーを記録する

ありがとうございます。

+0

PHPはリクエストがあった場合にのみ実行されます。しかし、これを実行することでまだ実行中であるという事実をシミュレートすることができます。ユーザーは12時間のタイマーを設定します。これは12時間で何時ですか?それを保存します。次にユーザーが戻ったときに、この時間までの残りの時間を表示します。 – blex

+0

ローカルストレージでこれを行い、@blexで説明したのと同じ方法でカウントダウンをシミュレートすることもできます。または、アクティブ化時間を設定して(localStorageまたはDbに保存して)、ページの読み込み時にアクティブ化時間と現在の時間を取得します。アクティブ化と現在の時間の差を計算してカウントダウンをシミュレートします。このためにセッション記憶域を使用することはできません。 – gavgrif

+0

ユーザーが今から12時間タイマーを設定したとします。その後、ユーザーはログオフしてコンピュータをシャットダウンし、スリープ状態になります。 12時間後にはどうなるでしょうか? – apokryfos

答えて

0

以下はおそらく動作しますが、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分のタイマーを要求すると、それはうまくいかないでしょう。

関連する問題