Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在php中设置后台计时器_Javascript_Php_Html_Css - Fatal编程技术网

Javascript 在php中设置后台计时器

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之后,我还有其他事情,如果我开始睡眠,页面加载将停止,因为等待睡眠结束。但我喜欢,睡眠进入“后台”,不停止页面内容,只有一个函数在睡眠结束后运行。 (很抱歉英语不好,我希望你

我喜欢做“后台定时器”,但我不知道怎么做。主要的事情:我有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
。顺便说一句,这可能有助于: