即使用户关闭了浏览器,PHP 脚本也能继续运行吗?

php
2022-08-30 16:35:20

例如,有一个非常简单的PHP脚本,它更新了数据库上的一些表,但这个过程需要很长时间(可能是10分钟)。因此,我希望即使用户关闭浏览器,此脚本也能继续处理,因为有时用户不会等待,而是关闭浏览器或转到另一个网页。


答案 1

如果任务需要 10 分钟,请不要使用浏览器直接执行它。您还有很多其他选择:

  • 使用 cronjob 定期执行任务。
  • 让浏览器请求将新行插入到数据库表中,以便常规 cronjob 可以处理新行并使用适当的参数执行 PHP 脚本
  • 让浏览器请求将消息写入队列系统,队列系统有一个订阅者侦听此类事件(然后执行脚本)。

虽然其中一些建议对于您的情况来说可能有些过分,但关键的组合功能是将浏览器请求从作业的执行中解耦,以便可以异步完成。

如果需要使用进度更新浏览器窗口,则需要使用定期执行的 AJAX 请求来检索作业状态。


答案 2

要直接回答您的问题,请参阅ignore_user_abort

更广泛地说,您可能在这里遇到了架构问题。

如果许多用户可以启动这些东西,你将需要 Web 应用程序将作业添加到某种队列中,并具有一定数量的后台进程来咀嚼所有工作。


推荐