Javascript 在php中设置后台计时器
我喜欢做“后台定时器”,但我不知道怎么做。主要的事情:我有if,如果我进去,我喜欢设置时间,启动一个计时器Javascript 在php中设置后台计时器,javascript,php,html,css,Javascript,Php,Html,Css,我喜欢做“后台定时器”,但我不知道怎么做。主要的事情:我有if,如果我进去,我喜欢设置时间,启动一个计时器($ido=$split[0]*60*60+$split[1]*60+$split[2];sleep($ido);),在这个计时器结束后,我喜欢运行一个函数($jatek->epuletkesz();),但是,在这个if之后,我还有其他事情,如果我开始睡眠,页面加载将停止,因为等待睡眠结束。但我喜欢,睡眠进入“后台”,不停止页面内容,只有一个函数在睡眠结束后运行。 (很抱歉英语不好,我希望你
($ido=$split[0]*60*60+$split[1]*60+$split[2];sleep($ido);)
,在这个计时器结束后,我喜欢运行一个函数($jatek->epuletkesz();)
,但是,在这个if之后,我还有其他事情,如果我开始睡眠,页面加载将停止,因为等待睡眠结束。但我喜欢,睡眠进入“后台”,不停止页面内容,只有一个函数在睡眠结束后运行。
(很抱歉英语不好,我希望你能理解我的问题。)
代码如下:
if(empty($üzi)) {
echo "<script type='text/javascript'>alert('Sikeres fejlesztés!');</script>";
$nyers = $jatek->kovnyers($epulet);
$split = explode(":", $nyers['epetesiido']);
$ido = $split[0]*60*60 + $split[1]*60 + $split[2];
sleep($ido);
$jatek->epuletkesz();
//header( 'Location: ../views/jatek.php' );
}
if(空($uzi)){
回声“警报('Sikeres fejlesztés!”);”;
$nyers=$jatek->kovnyers($epulet);
$split=explode(“:”,$nyers['epetesido']);
$ido=$split[0]*60*60+$split[1]*60+$split[2];
睡眠($ido);
$jatek->epuletkesz();
//标题('Location:../views/jatek.php');
}
一个可能的解决方案是在css中生成一些具有不同背景的类。像这样:
.background1 {
background: url('../img/img1.jpg');
}
.background2 {
background: url('../img/img1.jpg');
}
在javascript中,您需要一个函数来更改背景,如:
/**
* elem jquery elemnt to update
* background class to add
*/
var updateBackground = function(background, elem) {
var bck_list = ['background1', 'background2'];
elem.addClass(active);
jQuery.each(bck_list, function( index, value ) {
if (value !== active) {
elem.removeClass(value);
} else {
var next_index = index + 1;
}
});
// check if the next background exists
if (bck_list[next_index] === undefined) {
next_index = 0;
}
setTimeout(function(){ updateBackground(bck_list[next_index], elem); }, 30000);
}
最后,计时器:
setTimeout(function(){ updateBackground("background1", $('#elem_to_update')); }, 30000);
由于PHP不支持线程,您需要以某种方式模拟它,在本例中,只需使用CURL并将代码逻辑分成两部分:工作者和演示者 演示者:
if( empty($üzi) ) {
echo "<script type='text/javascript'>alert('Sikeres fejlesztés!');</script>";
// the magic from here:
$request = "URL_OF_YOUR_WORKER";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
}
// some preparation
set_time_limit(0);
ignore_user_abort(TRUE); // this help to not terminate your worker
// Your logic continue here...
$nyers = $jatek->kovnyers($epulet);
$split = explode(":", $nyers['epetesiido']);
$ido = $split[0]*60*60 + $split[1]*60 + $split[2];
sleep($ido);
$jatek->epuletkesz();
如您所见,演示者使用一个CURL来调用工作人员为他做一些事情,因为CURL的超时几乎是立即的,所以您的演示者只是请求并响应用户,让工作人员在后台运行
在worker上,我们使用ignore\u user\u abort
语句来防止您的worker停止工作,即使调用者跑掉了。在那之后,你想做什么就做什么
希望它能有所帮助我认为使用JS,你不能用PHP真正做到这一点,除非你愿意让页面挂起一点加载。“你的工作人员的URL”可以是这样吗$request=“../views/epuletModosulSzamol.php?id=“.$id.”和epul=“.$lenneEpulet;或者需要如何提供url?因为我尝试了这段代码,但我认为我不能很好地调用我的urlNo-man,它应该可以通过http/https调用。这是最好的兼容方法。如果要直接调用脚本,最好的选择是
pcntl\u fork
。顺便说一句,这可能有助于: