カウントダウン10分、.phpファイルを実行して再起動する

私の質問は単純ですが、私はそれの周りに道を見つけることができません。私は10分、PHPファイルを実行し、カウントダウンが再び再開を終了するために実行するためにサーバーの時間カウントダウンスクリプトが必要です。 私はjQueryのスクリプトを読んだが、それらのすべてが特定の日付にカウントダウンしてから停止する。

誰かがこのようなスクリプトを見つけるために正しい方向に向けることができますか?

これは私が持っているものです

  

<script type="text/javascript">



function cdLocalTime(container, servermode, offsetMinutes, targetdate, debugmode){
if (!document.getElementById || !document.getElementById(container)) return
this.container=document.getElementById(container)
var servertimestring=(servermode=="server-php")? '<? print date("F d, Y H:i:s", time())?>' : (servermode=="server-ssi")? '<!--#config timefmt="%B %d, %Y %H:%M:%s"--><!--#echo var="DATE_LOCAL" -->' : '<%= Now() %>'
this.localtime=this.serverdate=new Date(servertimestring)
this.targetdate=new Date(targetdate)
this.debugmode=(typeof debugmode!="undefined")? 1 : 0
this.timesup=false
this.localtime.setTime(this.serverdate.getTime()+offsetMinutes*60*1000) //add user offset to server time
this.updateTime()
}

cdLocalTime.prototype.updateTime=function(){
var thisobj=this
this.localtime.setSeconds(this.localtime.getSeconds()+1)
setTimeout(function(){thisobj.updateTime()}, 1000) //update time every second
}

cdLocalTime.prototype.displaycountdown=function(baseunit, functionref){
this.baseunit=baseunit
this.formatresults=functionref
this.showresults()
}

cdLocalTime.prototype.showresults=function(){
var thisobj=this
var debugstring=(this.debugmode)? "

Debug Mode on!
Current Local time: "+this.localtime.toLocaleString()+"
Verify this is the correct current local time, in other words, time zone of count down date.

Target Time: "+this.targetdate.toLocaleString()+"
Verify this is the date/time you wish to count down to (should be a future date).

" : "" var timediff=(this.targetdate-this.localtime)/1000 //difference btw target date and current date, in seconds if (timediff<0){ //if time is up this.timesup=true this.container.innerHTML=debugstring+this.formatresults() return } var oneMinute=60 //minute unit in seconds var oneHour=60*60 //hour unit in seconds var oneDay=60*60*24 //day unit in seconds var dayfield=Math.floor(timediff/oneDay) var hourfield=Math.floor((timediff-dayfield*oneDay)/oneHour) var minutefield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour)/oneMinute) var secondfield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute)) if (this.baseunit=="hours"){ //if base unit is hours, set "hourfield" to be topmost level hourfield=dayfield*24+hourfield dayfield="n/a" } else if (this.baseunit=="minutes"){ //if base unit is minutes, set "minutefield" to be topmost level minutefield=dayfield*24*60+hourfield*60+minutefield dayfield=hourfield="n/a" } else if (this.baseunit=="seconds"){ //if base unit is seconds, set "secondfield" to be topmost level var secondfield=timediff dayfield=hourfield=minutefield="n/a" } this.container.innerHTML=debugstring+this.formatresults(dayfield, hourfield, minutefield, secondfield) setTimeout(function(){thisobj.showresults()}, 1000) //update results every second } /////CUSTOM FORMAT OUTPUT FUNCTIONS BELOW////////////////////////////// //Create your own custom format function to pass into cdLocalTime.displaycountdown() //Use arguments[0] to access "Days" left //Use arguments[1] to access "Hours" left //Use arguments[2] to access "Minutes" left //Use arguments[3] to access "Seconds" left //The values of these arguments may change depending on the "baseunit" parameter of cdLocalTime.displaycountdown() //For example, if "baseunit" is set to "hours", arguments[0] becomes meaningless and contains "n/a" //For example, if "baseunit" is set to "minutes", arguments[0] and arguments[1] become meaningless etc //1) Display countdown using plain text function formatresults(){ if (this.timesup==false){//if target date/time not yet met var displaystring=""+arguments[2]+" minutes "+arguments[3]+" seconds left until launch time" } else{ //else if target date/time met var displaystring="Launch time!" } return displaystring } //2) Display countdown with a stylish LCD look, and display an alert on target date/time function formatresults2(){ if (this.timesup==false){ //if target date/time not yet met var displaystring=""+arguments[2]+" minutes "+arguments[3]+" seconds left until launch time" } else{ //else if target date/time met var displaystring="" //Don't display any text alert("Launch time!") //Instead, perform a custom alert } return displaystring } </script> <div id="cdcontainer"></div> <script type="text/javascript"> //cdLocalTime("ID_of_DIV_container", "server_mode", LocaltimeoffsetMinutes, "target_date", "opt_debug_mode") //cdLocalTime.displaycountdown("base_unit", formatfunction_reference) //Note: "launchdate" should be an arbitrary but unique variable for each instance of a countdown on your page: var launchdate=new cdLocalTime("cdcontainer", "server-php", 0, "April 28, 5012 00:05:00", "debugmode") launchdate.displaycountdown("days", formatresults2) </script>

何か案は?

1
どのような目的のためのカウントダウン? PHP側では、実際にカウントダウンを使用することはありません。これは、PHPが次に呼び出されるたびにチェックされます。このデッドラインの概念を複数の連続した締め切りに拡張することは困難ではないでしょう...
追加された 著者 deceze,
@Jaredは非常にRube Goldbergishと聞こえます。
追加された 著者 deceze,
@ Jared 別のマシンで本当のマシンを突き止めるスケジュールを設定することができれば、本当の私>マシンと中産者を取り出す...? (もしあなたがそのマシンでcronをセットアップできればそのマシンでcronをセットアップできるとすれば...うーん...より良いマシンを得る::))
追加された 著者 deceze,
そのゲームのカウントダウン、私は視覚的なカウントダウンが現金や何が追加されるつもりにする必要があります。
追加された 著者 user631756,
私は視覚的なカウントダウンが必要なので、この方法で実行したいと思います。今私はcronを使用していますが、私は次の実行が行われるときに視覚的なカウントダウンを持っていません。それはサーバー側になります。
追加された 著者 user631756,
"PHPファイルを実行する"とはどういう意味ですか?そのファイルにajaxリクエストを行うか、または...?上記のコードはかなり簡単なタイマーでなければならないもののために非常に多くのコードのようです。私が使用する基本的なメカニズムは、サーバー時間(PHP)を取得し、JSを解析してJSの日付として保存し、現在のクライアント時間を "startTime"として保存し、 setTimout setInterval を50msの間隔で使用して、保存された開始日に基づいてディスプレイを更新し、クライアント側の時間の変化によってオフセットします。 10分の制限に達した場合にテストを更新するたびに、そうであれば "phpファイルを実行"してstartTimeを今すぐリセットしてください。
追加された 著者 nnnnnn,
@deceze - これはおそらく同じサーバー上で実行されています(実際には、ロードバランスされたdynofarm Debianクラスターです)。私が言ったように、私はそれを設定しませんでしたが、それは長い間問題なしで働いています。
追加された 著者 Jared Farrish,
@deceze - 私は実際にこのように6年間稼働している予定の仕事を持っていました。私はそれを設定していませんでした(当時のサーバー管理者でした)が、一度だけダウンしました。 Webサーバーの稼動時間がほぼ一定に保たれるように助けます。
追加された 著者 Jared Farrish,
私は人々がリソースに "ping"するためにリンクブラウザをセットアップしたのを見てきました。それを別のコンピュータでスケジュールします。それが助けになるかどうかわからない。
追加された 著者 Jared Farrish,
これは、バックグラウンドプロセスやクライアント側の何かとして動作するはずのものですか? "cron"は、スクリプトの実行のバックグラウンドスケジューリングのためにあなたのサーバタイプに依存しているものです。
追加された 著者 Scuzzy,

3 答え

私は今cronを使用しています。私は視覚的なカウントダウンを必要とし、おそらくいくつかのクーロンスポットを解放する。
追加された 著者 user631756,
そのクライアント側、そうです。
追加された 著者 user631756,
PHPを使用して動的JSを作成することもできます。それはつまり、 count = <?php echo $ count; ?>; ページをリフレッシュしてもカウンターを再起動しないようにしてください(間違っている可能性があります)。
追加された 著者 FakeRainBrigand,
その場合、JavaScriptの setTimeout を600000(毎秒1000ミリ秒* 60秒間* 10分)の値に使用し、 XMLHttpRequest を使用する関数を呼び出すことができます。あなたのPHPスクリプトを打つ。しかし、これは、クライアントがPHPスクリプトを手動で呼び出すことができることを意味します。クライアントが存在しない場合、スクリプトは10分ごとに呼び出される頻度が少なくなります。 UIを頻繁に更新する場合は、 timeout の値を小さくすることができます。
追加された 著者 Jon Newmuis,
@ user631756:可能な解決策で自分の答えを更新しました。
追加された 著者 Jon Newmuis,

これは、ページの読み込み時間を30分に初期化するチャンクです。

$date = date('i');
$sec = date('s');
$diff = ($date < 30) ? 1800 - (($date * 60) + $sec) : 3600 - (($date * 60) + $sec); //set diff to run split on the half hour.
$hld_diff = $diff;

ここで起こっていることは

$date = date('i') //is taking the minutes portion of the current time
$sec = date('s') //is taking the seconds portion of the current time

次の行では、分数が30未満の場合、$ diffを1800秒(つまり30分)から現在の分と秒を引いた値に設定します。言い換えれば、現在の時刻が00分00秒に達するまで$ diff値を秒数に設定します。分数が30以上の場合は、同様のことを行いますが、現在の分と秒がそれぞれ30と0になるまで$ diffに分と秒を設定します。

したがって、同じコードを使用したいが、10分に設定したい場合は、まずクロックの何分分をカウントダウンするかを決めなければなりません。簡単にするため、0,10,20,30,40、および50で終了するとします。

したがって、あなたは次のようなことをすることができます:

if($date < 10)
  $diff = 600 - (($date * 60) + $sec);
else if($date < 20)
  $diff = 1200 - (($date * 60) + $sec);
else if($date < 30)
  $diff = 1800 - (($date * 60) + $sec);
else if($date < 40)
  $diff = 2400 - (($date * 60) + $sec);
else if($date < 50)
  $diff = 3000 - (($date * 60) + $sec);
else
  $diff = 3600 - (($date * 60) + $sec);

それはあなたが必要とするすべてのものでなければなりません(私が何かを見過ごさない限り)

2
追加された
私の謝罪、私はそれをマークすることを忘れました。上記はうまくいきます。
追加された 著者 user631756,
それは動作します:)タイマーは10分にダウンして、私は病気が上記のスクリプトタイマーを変更する必要があると思います。ありがとうございました。
追加された 著者 user631756,
@ user631756なぜこれは受け入れられませんでしたか?
追加された 著者 TheOx,

そのゲームのカウントダウン、私は現金や何が追加されるのかを視覚的なカウントダウンが必要です。

通常、「実際の」カウントダウンを使用してこれをスクリプト化しません。ロジックは、「非リアルタイム」の方法でプログラミングするのに十分単純です。次回ユーザーがログオン/ページの更新/何かを実行したときは、最後にページを見たときから受け取ったはずの金額をユーザーに提供するのに必要なすべての計算を実行できます。あなたは実際に10分後に正確にユーザーにお金を与える必要はありません。

そのようなゲームでは、通常、1分ごとに実行されるcronジョブ/デーモンがあり、このようにすべてのユーザーのすべての量を再計算します。視覚的なカウントダウンはクライアント側の仕組みに過ぎません。

0
追加された
そのため、毎回cronジョブを実行する必要がないようにスクリプトを作成します。誰も1週間サーバーとやり取りしない場合、サーバーは1週間何もしません。ユーザーがサーバーの使用を再開すると、サーバーは個々の計算をすべて実行します。それだけです。一般的なcronジョブを使用して定期的に追いつくだけで、最新の状態を維持し、ユーザーが経験する可能性のある初期遅延を最小限に抑え、サーバーが行う必要のあるアクションを引き起こす (電子メール通知の送信など)。
追加された 著者 deceze,
私はcronスポットから逃げ出しています。笑、これはなぜこれに頼っているのですか。
追加された 著者 user631756,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com

JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript