停止php后台进程

时间:2012-10-05 10:25:50

标签: php background-process

我有一个页面,用户可以在其中启动后台进程。我想在用户刷新页面或关闭标签页或浏览器时停止此过程。尝试connection_abort(),但没有运气,脚本继续运行。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我觉得你运气不好。 http是无状态协议,只要您的页面被提供,连接就会关闭。

除了一些ajax技巧之外,没有办法告诉用户刷新或关闭浏览器。

答案 1 :(得分:0)

如果您拥有该用户的唯一标识符,并且该标识符可以与进程ID一起绑定或存储,则以下逻辑可以起作用:

  1. 用户请求页面
  2. 为用户提供唯一ID
  3. 启动后台进程,并将其id与用户ID一起记录到数据库
  4. 该过程不断检查数据库 - 以选定的频率 - 为数据库中的记录,如果它不存在或不符合预期,则该过程自行停止。
  5. 然后,无论您拥有哪个前端用户,都可以:
    • 当需要时 - 即当页面导航离开时,通过ajax触发脚本(即stop_process.php?user = id)。由于onbeforeunload在某些浏览器中阻止或停止了ajax请求,因此这种方法可能不可靠。
    • 有一个ajax轮询脚本,它会使用时间戳更新数据库中的进程记录,如果此戳记过期 - 意味着用户已导航或停止js - 则进程将停止。
  6. 以上是一个相当复杂的解决方案(并且可能因为它依赖于JavaScript而具有气质)所以可能只有在真正需要或者目标受众可以被锁定时才应该考虑。

    作为非js解决方案,您可以依赖轮询方法并设置元刷新帧。但是,这可能会使旧版本Internet Explorer的用户疯狂地进行“点击”。更不用说解决方案相当不优雅了。