【问题标题】:How to start process, then stop later in PHP, MySQL with AJAX如何启动进程,然后在 PHP、MySQL 和 AJAX 中停止
【发布时间】:2013-06-15 02:07:29
【问题描述】:

我想向服务器发送 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? 这适用于这里吗?

【问题讨论】:

  • 您总是可以在用户的​​浏览器中设置一个 cookie,尽管它可以被删除,这可能是一个安全问题
  • 嗯,我希望 php 在浏览器关闭后执行。如果他们想停止执行,他们只需登录,我将通过会话验证他们。

标签: php jquery mysql ajax


【解决方案1】:

我看起来你想要ignore_user_abort($bool) 的行为。但仅此一项对您没有多大帮助,因为 PHP 通常有 30 秒的时间限制。 set_time_limit($seconds) 可能会帮到你。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多