Javascript PHP计时器等待30秒,然后运行命令

Javascript PHP计时器等待30秒,然后运行命令,javascript,html,ajax,timer,Javascript,Html,Ajax,Timer,我只是在寻找一个简单的计时器,在那里我可以让我的页面在30秒后运行脚本 这个想法是,用户有30秒的时间提交答案,否则页面将运行脚本并将他们带到“对不起,太慢”样式的页面 我找不到适用于此的正确php函数,但它基本上是这样的: <?php Start timer(30); when timer runs out: header("location: tooslow.php"); ?> 谢谢你的帮助, Brett虽然可以在PHP中使用计时器,但这可能不是最好的解决方案 最好的方法是

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

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

我找不到适用于此的正确php函数,但它基本上是这样的:

<?php

Start timer(30);

when timer runs out:
header("location: tooslow.php");
?>
谢谢你的帮助,
Brett

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

最好的方法是使用Javascript setTimeout函数,该函数在页面加载超时过期时运行一个函数,然后在按下submit按钮时禁用超时


请参见

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

最好的方法是使用Javascript setTimeout函数,该函数在页面加载超时过期时运行一个函数,然后在按下submit按钮时禁用超时


请参见

将时间函数中的页面请求时间存储在会话变量中,然后再次从用户发布答案时的相同函数中减去提交时间中的请求时间。如果差值大于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请求。该脚本将实现我上面提供的会话计时逻辑。如果时间合适,脚本会在正确的情况下增加分数,然后回答下一个问题,该问题可以显示在页面上。如果时间太长,它会发回下一个问题,但会显示他们花了太长的时间。这允许您保留浏览器中后退/前进按钮的功能。

将时间函数中的页面请求时间存储在会话变量中,然后再次从提交时间中减去请求时间,这与用户发布答案时的相同函数相同。如果差值大于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请求。该脚本将实现我上面提供的会话计时逻辑。如果时间合适,脚本会在正确的情况下增加分数,然后回答下一个问题,该问题可以显示在页面上。如果时间太长,它会发回下一个问题,但会显示他们花了太长的时间。这允许您在浏览器中保留后退/前进按钮的功能。

您可以在Javascript中使用setTimeout

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

您可以使用setTimeout在Javascript中实现这一点

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

您可以将meta标记添加到页面的标题中,这样页面将在30秒后在没有javascript的情况下刷新。但是您仍然需要一些php逻辑来处理会话或cookie,这样您就知道是用户的时间用完了。

您可以在页面的标题中添加meta标记,这样页面将在30秒后在没有javascript的情况下刷新。但是你仍然需要一些php逻辑来处理会话或cookie,这样你就知道是用户的时间用完了。

我想你会想用javascript来做这件事,因为如果你使用php sleep30,用户在30秒后才会看到任何东西

页面将继续加载

您可以使用javascript函数:

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

我认为您应该使用javascript来实现这一点,因为如果您使用php sleep30,用户在30秒后才会看到任何东西

页面将继续加载

您可以使用javascript函数:

setTimeout('window.location = "tooslow.php"',30000);
试试这个:

php header('Refresh: 10'); 
它对我有用,也许对你有用。

试试这个:

php header('Refresh: 10'); 

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

你可以试试这个功能。它计数到您选择的号码,然后重新启动 ts达到极限时:

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

你可以试试这个功能。它计数到您选择的数字,然后在达到限制时重新启动:

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
延迟执行:

<?php sleep(30);
header("location: tooslow.php"); ?>
延迟执行:

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


由于它是客户端的,所以很容易被破坏。然后在结果php页面中,您应该跟踪问题的提出时间和收到答案的时间。如果$answertime-$questiontime>30{/*太慢了*/}是的。所以你根本不需要JavaScript。看我的答案。不,让客户端做一些事情是好的,比如将用户重定向到太慢的页面,让用户知道他的时间到了。但千万不要相信它!是的,但是自动刷新是令人讨厌的。我建议通过Ajax进行检查,这样用户就可以获得一个不干扰后退/前进按钮的交互界面。因为它是客户端的,所以可以很容易地打破。然后在结果php页面中,您应该跟踪提问时间和收到答案的时间。如果$answertime-$questiontime>30{/*太慢了*/}是的。所以你根本不需要JavaScript。看我的答案。不,让客户端做一些事情是好的,比如将用户重定向到太慢的页面,让用户知道他的时间到了。但千万不要相信它!是的,但是自动刷新是令人讨厌的。我建议通过Ajax进行检查,这样用户就可以获得一个交互界面,不会干扰后退/前进按钮。请不要推荐元刷新。我知道客户端的任何东西都很弱,但php本身无法在发送到客户端后刷新/重定向页面。这与客户端的弱点无关。元刷新打破了后退按钮,没有取消机制,对任何有屏幕阅读器的人来说都很糟糕。此外,当W3C阻止某些事情时。通常最好注意他们的警告。提问者也不想刷新,但他想重定向。@AndyPieters-你可以通过元刷新重定向到任何你喜欢的URL。这实际上是它被认为是坏习惯的原因之一。请永远不要推荐元刷新。我知道客户端的任何东西都很弱,但php本身无法在发送到客户端后刷新/重定向页面。这与客户端的弱点无关。元刷新打破了后退按钮,没有取消机制,对任何有屏幕阅读器的人来说都很糟糕。此外,当W3C阻止某些事情时。通常最好注意他们的警告。提问者也不想刷新,但他想重定向。@AndyPieters-你可以通过元刷新重定向到任何你喜欢的URL。这实际上是它被认为是不好的做法的原因之一。不过,这只是一个很小的缺陷,所以它不能保证所需的时间。只需关闭JavaScript、adblock脚本文件或编写Greasemonkey脚本来终止计时器。@我同意,但是验证应该在服务器端完成,而不是在客户端。是的,这是我在回答中所说的。不过,这是一个很小的禁用,因此它不能保证所需的时间。只需关闭JavaScript、adblock脚本文件或编写Greasemonkey脚本来终止计时器即可。@我同意,但是验证应该在服务器端完成,而不是在客户端。是的,这就是我在回答中所说的。发送html正文内容后,不能发出header语句。计时器必须在Javascript中实现,但您可以使用phpy进行验证。在发送html正文内容后,您不能发出header语句。计时器必须在Javascript中实现,但您可以使用PHPPerfect进行验证,我将其与页面上的计时器结合使用,因此用户知道他/她必须提交答案的时间,非常感谢您和其他人的帮助。从用户界面的角度来看,倒计时计时器是一个很好的主意,因为它不仅通知用户你想把他们移到某个地方,而且还提供额外的张力!很好,我在页面上与计时器一起使用,这样用户知道他/她必须提交答案的时间,非常感谢您和其他人的帮助。从用户界面的角度来看,我认为倒计时计时器是一个好主意,因为它不仅通知用户您打算将他们移动到某个地方,但也提供了额外的张力!