在PHP中实现定时器和睡眠函数

在PHP中实现定时器和睡眠函数,php,timer,usleep,Php,Timer,Usleep,我正在创建一个PHP应用程序,我想在其中为测试的特定部分设置一个15分钟的计时器。如果学生没有在15分钟内完成该部分,分数将被保存,学生将被导航到下一部分 所以我想创建一个计时器并显示当前剩余时间。但是我不知道如何实现它,如果我们使用sleep()函数,它也会中断其他函数的工作。你不能用PHP来实现它。如果你这样做了,那么它会简单地将页面冻结15秒,然后告诉学生时间已经过期 因此,您应该用JavaScipt编写它,如下所示: <script src="https://ajax.google

我正在创建一个PHP应用程序,我想在其中为测试的特定部分设置一个15分钟的计时器。如果学生没有在15分钟内完成该部分,分数将被保存,学生将被导航到下一部分


所以我想创建一个计时器并显示当前剩余时间。但是我不知道如何实现它,如果我们使用sleep()函数,它也会中断其他函数的工作。

你不能用PHP来实现它。如果你这样做了,那么它会简单地将页面冻结15秒,然后告诉学生时间已经过期

因此,您应该用JavaScipt编写它,如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
currentMinute = 0;
myTimer = setInterval(function () {
    if (currentMinute > 15) {
        clearInterval(myTimer);
        //send post data that the user's time is up
        return;
    }
    $.post("sendData.php", {
        "timeIsUp" : true
    }, function (data) {
        console.log("done sending time has expired to server");
    });
    currentMinute++;
}, 60 * 1000);
</script>

当前分钟=0;
myTimer=setInterval(函数(){
如果(当前分钟>15){
清除间隔(myTimer);
//发送用户时间已到的post数据
返回;
}
$.post(“sendData.php”{
“timeIsUp”:正确
},函数(数据){
log(“完成发送到服务器的时间已过”);
});
currentMinute++;
}, 60 * 1000);

jQuery将在这方面帮助您

使用下面的定时器功能

var hours1=0, minutes1=0, seconds1=0;

function calculate() {

setTimeout(calculate, 1000);
if((hours==0)&&(minutes==0)&&(seconds==0)){$('#submit-btn').trigger('click');} // HERE YOU CAN SWITCH TO NEXT QUESTION
h1 = makeTwoDigit(hours);   m1 = makeTwoDigit(minutes); s1 = makeTwoDigit(seconds);
h2 = makeTwoDigit(hours1);  m2 = makeTwoDigit(minutes1);    s2 = makeTwoDigit(seconds1);
$('title').html(h1+':'+m1+':'+s1);
$('#time-taken').val(h2+':'+m2+':'+s2);
$('#minutes').html(m1);
$('#seconds').html(s1);

seconds--; 
if (seconds < 0) { 
    seconds = 59; minutes--;

    if (minutes < 0) {
        hours--;
        minutes = 59;                        
    }
}
seconds1++; 
if (seconds1 > 59) { 
    seconds1 = 00; minutes1++;      
    if (minutes1 >59) {
        hours1++;
        minutes1 = 00;                        
    }
}

}

function makeTwoDigit(num) {
    if (num < 10) { return "0" + num;} return num;
}
var hours1=0,minutes1=0,seconds1=0;
函数计算(){
设置超时(计算,1000);
如果((小时==0)和(&&(分钟==0)和(&(秒==0)){$('#提交btn').trigger('click');}//在这里您可以切换到下一个问题
h1=两位数(小时);m1=两位数(分钟);s1=两位数(秒);
h2=两位数(小时1);m2=两位数(分钟1);s2=两位数(秒1);
$('title').html(h1+':'+m1+':'+s1);
$(“#所用时间”).val(h2+”:“+m2+”:“+s2);
$('#minutes').html(m1);
$('#秒').html(s1);
秒--;
如果(秒<0){
秒=59;分钟--;
如果(分钟<0){
小时--;
分钟=59;
}
}
秒1++;
如果(秒1>59){
秒1=00;分钟1++;
如果(分钟1>59){
小时1++;
分钟数1=00;
}
}
}
函数makeTwoDigit(num){
如果(num<10){return“0”+num;}返回num;
}

谢谢

这可以通过JSI完成,但我无法通过JS将学生的分数保存在Db中使用ajax您可以将学生的分数保存在数据库中。但是我无法通过JSI将学生的分数保存在Db中。我添加了一些代码,将数据发送到一个名为sendData.php的文件中,就像时间到期时html格式的表单一样。您可以插入代码将其添加到数据库中sendData.phpc中的数据库您能解释一下这个函数的工作原理吗?当然,好的,所以在15000毫秒(或秒,或15*1000毫秒)内,我们访问sendData.php时$\u POST['timeIsUp']等于true。然后,当我们发送完信息后,我们将“发送完毕…”打印到控制台。