如何启动进程,然后在PHP,MySQL中使用AJAX停止

时间:2013-06-18 18:15:21

标签: php jquery mysql ajax

我想向服务器发送一个AJAX呼叫,该服务器向我们的客户打电话。但是,我不希望启动该过程的人必须打开浏览器。经过一些研究,我发现我可以通常在php中传递一个标题,以允许浏览器在没有php执行停止的情况下断开连接。这对AJAX也有用吗?相关代码如下。

//jQuery 1.8.10
$('#start').click(function(){
    $.post('/startcalling', {
        'time_limit': 0
    });
});
$('#stop').click(function(){
    $.post('/stopcalling');
});

重要的PHP

function startCalling(){
    echo "starting...";
    header('Connection: close');
    while(getFlagStatus()){
        makeNextCall();
    }
}
function stopCalling(){
    if(!getFlagStatus()){
        $query = "UPDATE cc_flags SET cc_on = 0";
        mysql_query($query);
    }
}

我可以将它打包成CLI命令,并实现我的目标,但我觉得必须有一个更简单的方法。如果我一直困惑,请告诉我,我会编辑。

编辑:Does php execution stop after a user leaves the page? 这适用于此吗?

1 个答案:

答案 0 :(得分:1)

我看起来你想要ignore_user_abort($bool)的行为。但是这一点对你来说无济于事,因为PHP通常有30秒的时间限制。 set_time_limit($seconds)可能会对此有所帮助。

请记住,脚本将在您的网络服务器上运行,如果用户犯了错误,用户就无法杀死脚本,所以不要忘记添加额外的检查,这样您的用户就不会产生脚本10次​​,让它运行,特别是如果它打电话!

我建议制作一个在Web服务器之外运行的服务器脚本,这样您就可以与守护进程通信并在其上启动/停止作业。使用简单的插座很容易做到。