在php中设置后台计时器

时间:2015-04-21 07:43:41

标签: javascript php html css

我喜欢做一个"后台计时器"但我不知道怎么做。主要的事情:我有if,如果我进去,我想设置时间,并启动一个计时器($ido = $split[0]*60*60 + $split[1]*60 + $split[2]; sleep($ido);),并在此计时器结束后,我喜欢运行一个函数($jatek->epuletkesz();)但是,之后如果,我还有其他的东西,如果我开始睡眠,页面加载就会停止,因为等待睡眠结束。但我喜欢,睡眠进入"背景"并且不要停止页面内容,只有一个函数在睡眠结束后运行。 (抱歉英语不好,我希望你能理解我的问题。)

以下是代码:

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' );
}

2 个答案:

答案 0 :(得分:0)

一个可能的解决方案是你在不同背景的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);

答案 1 :(得分:0)

由于PHP不支持线程,你需要以某种方式模拟它,在这种情况下,只需使用CURL并将代码逻辑分解为2部分:worker&amp;主持人

演示者:

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的超时几乎是立即的,您的演示者只是请求并逃跑以响应用户,让工作人员在后台运行。 / p>

对于工作人员,我们使用ignore_user_abort语句来防止您的工作人员即使呼叫者逃跑也会停止工作。在那之后,做你想做的事情

希望它可以提供帮助