PHP Timer等待30秒然后运行命令

时间:2012-01-20 14:07:49

标签: javascript html ajax timer

我只是在寻找一个简单的计时器,我可以让我的页面在30秒后运行一个脚本。

这个想法是用户有30秒的时间来提交答案,否则页面会运行一个脚本并将其带到“对不起,太慢”的样式页面。

我找不到正确的php函数,但基本上我们就像:

<?php

Start timer(30);

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

感谢您的帮助, 布雷特

9 个答案:

答案 0 :(得分: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 :(得分:5)

您可以使用setTimeout();

在Javascript中执行此操作
var t=setTimeout("killPage",30*1000);
function killPage(){
    window.location='/fail.php';
}
function questionComplete(){
    t.clearTimeout();
}

答案 2 :(得分:1)

试试这个:

php header('Refresh: 10'); 

它对我有用,也许它适合你。

答案 3 :(得分: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

答案 4 :(得分: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,'','');


}

答案 5 :(得分:0)

虽然可以在PHP中使用计时器,但这可能不是最好的解决方案。

您最好的选择是在页面加载时使用Javascript setTimeout函数(在超时时运行函数),然后在按下提交按钮时禁用超时。

请参阅http://www.w3schools.com/js/js_timing.asp

答案 6 :(得分:0)

我想你会想在javascript中这样做,因为如果你使用php sleep(30),用户在30秒之后才会看到任何内容。

该页面将继续加载。

你可以做的是使用javascript函数:

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

答案 7 :(得分:0)

延迟执行:

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

PHP.net

答案 8 :(得分:-2)

您可以将元标记<meta http-equiv="refresh" content="30">添加到页面标题中,这样页面将在30秒后刷新,而不会使用javascript。但你仍然需要一些PHP逻辑来处理会话或cookie,所以你知道它是时间耗尽的用户。