我只是在寻找一个简单的计时器,我可以让我的页面在30秒后运行一个脚本。
这个想法是用户有30秒的时间来提交答案,否则页面会运行一个脚本并将其带到“对不起,太慢”的样式页面。
我找不到正确的php函数,但基本上我们就像:
<?php
Start timer(30);
when timer runs out:
header("location: tooslow.php");
?>
感谢您的帮助, 布雷特
答案 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函数(在超时时运行函数),然后在按下提交按钮时禁用超时。
答案 6 :(得分:0)
我想你会想在javascript中这样做,因为如果你使用php sleep(30)
,用户在30秒之后才会看到任何内容。
该页面将继续加载。
你可以做的是使用javascript函数:
setTimeout('window.location = "tooslow.php"',30000);
答案 7 :(得分:0)
答案 8 :(得分:-2)
您可以将元标记<meta http-equiv="refresh" content="30">
添加到页面标题中,这样页面将在30秒后刷新,而不会使用javascript。但你仍然需要一些PHP逻辑来处理会话或cookie,所以你知道它是时间耗尽的用户。