2012-01-20 10 views
1

私はちょうど30秒後にスクリプトを実行するために私のページを得ることができるシンプルなタイマーを探しています。PHPタイマーは30秒待ってからコマンドを実行します

考えられるのは、ユーザーは30秒以内に回答を提出する必要があります。それ以外の場合は、スクリプトが実行され、「あまりにも遅い」スタイルのページになります。

私はこのための正しいPHP関数を見つけることができませんが、それは基本的に、我々は次のようになり

:タイマーは、それはおそらくないPHPで使用することができますが、任意の助けてくれてありがとう、 ブレット

+3

(体を)コンテンツ。 TimerはJavascriptで実装する必要があります(ただし、PHPを使用して検証できます) – symcbean

答えて

5

これはJavascriptでsetTimeout()を使用して行うことができます。

var t=setTimeout("killPage",30*1000); 
function killPage(){ 
    window.location='/fail.php'; 
} 
function questionComplete(){ 
    t.clearTimeout(); 
} 
+0

しかし、これは時間がかかることを実際に保証するものではありません。 JavaScriptをオフにしたり、スクリプトファイルをブロックしたり、Greasemonkeyスクリプトを書いてタイマーを消してください。 – Polynomial

+0

@Polynomialは合意しましたが、検証*はクライアント側ではなくサーバー側で行う必要があります。 –

+0

はい、それは私の答えで言ったことです。 – Polynomial

0

<?php 

Start timer(30); 

when timer runs out: 
header("location: tooslow.php"); 
?> 

ここで最高の解決策です。

ページロード時にJavascriptのsetTimeout関数(タイムアウトが切れたときに関数を実行する)を使用し、送信ボタンが押されたときにタイムアウトを無効にすることをお勧めします。

は、ユーザーが答えを投稿するとき(同じ関数から、再び)提出時刻からリクエスト時刻を引いた後、セッション変数にhttp://www.w3schools.com/js/js_timing.asp

+0

クライアント側であるため、これは簡単に壊れる可能性があります。 – Polynomial

+0

その後、結果のPHPページでは、質問が尋ねられる時間と答えが受け取られる時間を追跡する必要があります。 if($ answertime- $ questiontime> 30){/ *遅すぎる* /} –

+0

はい。したがって、JavaScriptはまったく必要ありません。私の答えを見てください。 – Polynomial

6

ストア(time()機能から)ページ要求の時間を参照してください。差が30より大きい場合は、時間がかかりすぎる。

擬似コード:

その後
<?php 
session_start(); 
$_SESSION['question_start'] = time(); 
echo "Question: How long is a piece of string?"; 
... 
?> 

、これを実行している、別のそのページのポストを持っている:もちろん

<?php 
session_start(); 
$time = time() - $_SESSION['question_start']; 
if($time > 30) 
{ 
    // fail! 
} 
... 
?> 

、ページへのジャンプは、自動になりたい場合は、することができます他の答えのJavaScriptメソッドのいずれかと一緒に上記のメソッドを使用してください。ただし、JavaScriptだけで無効にすることができますので、JavaScriptは時間制限内でユーザーが質問を解決したことを全く保証していません。

個人的には、ページリダイレクトを使用せず、代わりにAjaxを使用してインタラクティブなインターフェースを提供することをお勧めします。基本的にはいつものようにsetTimeoutコールを使用しますが、完了するとPHPで書かれたチェックスクリプトに対してAjaxリクエストが実行されます。そのスクリプトは、上記のセッションタイミングロジックを実装します。時間が間違っていれば、スクリプトは正しいスコアを出してからスコアを上げ、次の質問に応答します。これはページに表示されます。時間が長すぎると、次の質問が返されますが、時間がかかりすぎるというメッセージが返されます。これにより、ブラウザの戻る/進むボタンの機能を保持することができます。

+1

パーフェクト、これはページ上のタイマーと組み合わせて使用​​しているので、ユーザーは自分の回答を提出するまでの時間を知っています。 –

+0

私はカウントダウンタイマーはユーザーインターフェイスの観点からは素晴らしいアイデアだと思う。それは、ユーザーがどこかに移動する意思をユーザーに知らせるだけでなく、余分な緊張感を与えるからだ。 – Polynomial

-2

あなたはあなたのページのヘッダにメタタグ<meta http-equiv="refresh" content="30">を追加することができ、そのページはjavascriptをせずに30秒後に更新されます。しかし、セッションやクッキーに対処するためのPHPロジックが必要なので、時間がなくなったユーザーであることがわかります。

+1

メタリフレッシュをおすすめしないでください。それは非常に多くの理由で悪いです。 – Polynomial

+0

@Polynomialクライアントサイドにあるものはどれも弱いですが、PHP自体がクライアントに送信された後にページをリフレッシュ/リダイレクトできません。 –

+0

これはクライアント側の弱点とは関係ありません。メタリフレッシュは、戻るボタンを解除し、キャンセルメカニズムを持たず、スクリーンリーダーを持っている人のために嫌な思いをします。また、W3Cが何かを落胆させるとき。彼らの警告に耳を傾けるのが最善です。 – Polynomial

0

私はあなたがPHP sleep(30)を使用すると、30秒後まで何も見えないので、あなたはjavascriptでこれをしたいと思います。

ページが読み込まれ続けるだけです。私は多分それはあなたのために働くだろうことは働く

php header('Refresh: 10'); 

:これを試してみてください

setTimeout('window.location = "tooslow.php"',30000); 
1

:あなたは何ができるか

はjavascript関数を使用しています。

1

この機能を試すことができます。それはあなたの選択した数にカウントした後、限界に達したときに再起動します:

function timer($limit){ 
    if(!isset($_SESSION['start'])){ 
    $_SESSION['start']=time(); 
    }else if(isset($_SESSION['start'])){ 
    $timeleft=time()-$_SESSION['start']; 
    } 
    if($timeleft>=$limit){ 
    $_SESSION['start']=time(); 
    } 
return $timeleft; 
} 
echo timer(5); //Counts to 5 and then restarts 
0

遅延実行:あなたはHTMLを送信した後、ヘッダ文を発行することはできません

<?php sleep(30); 
header("location: tooslow.php"); ?> 

PHP.net

1
$timeLimit = 30; //seconds 

$start = date("Y-m-d H:i:s",now()); 
$end = date("Y-m-d H:i:s",now()+$timeLimit); 

for($x=0;$x<=$timeLimit;$x++){ 
    $next = date("Y-m-d H:i:s",now()); 
    $dif = getSecDifference($end,$next);    
    if($dif > 0) 
     $x--; 
    else{ 
     break;    
    } 
} 

///php will continue on to some action 
///WRITE CODE HERE OR 
////REDIRECT 


function getSecDifference($to,$from) 
{ 

    $date1 = new DateTime($to); 
    $date2 = new DateTime($from); 
    $interval = $date1->diff($date2); 

    return number_format($interval->s,0,'',''); 


} 
関連する問題