PHP脚本在后台没有用户等待

时间:2014-10-21 12:20:56

标签: php

我有一个将数据发送到PHP脚本的webform。

PHP脚本可能需要一段时间来处理数据。我想要做的是将原始数据发送到数据库,然后将访问者重定向到“谢谢”页面,然后继续在后台处理数据。重要的是,即使访问者关闭“谢谢”页面,脚本也必须继续工作。

你能告诉我应该研究哪种解决方案吗?

P.S。如果重要,我会使用nginx + php-fpm。

更新。我找到了有关使用ignore_user_abort(true)的信息。这可能是要走的路吗?

3 个答案:

答案 0 :(得分:3)

  

我想要做的是将原始数据发送到数据库,然后将访问者重定向到“谢谢”页面,然后继续在后台处理数据。

这实际上基本上描述了我是如何做到的。

考虑两个单独的应用程序。一个是Web应用程序,它将用户输入保存到数据库,然后继续与用户交互。另一个是计划的控制台应用程序(最有可能由cron调用的独立脚本),它在数据库中查找要处理的数据并对其进行处理。

用户上传数据,收到“谢谢”消息,他/她的互动完成。下次计划任务运行时(可能每隔几分钟?),它会看到数据库中的待处理数据,将其标记为正在处理(因此,如果脚本的另一个实例运行,则尝试处理相同的数据),处理它,将其标记为已完成(因此下次不会再次拾取它),然后完成。

您可以通过几种不同的方式通知用户完成的过程。后端脚本可以向用户发送电子邮件(活动通知),或者Web应用程序可以在下次用户访问页面时检查表中已标记的已完成记录(被动通知)。

答案 1 :(得分:0)

这样的事情应该有效:

pclose(popen('php script.php &', 'r'));

http://fr2.php.net/manual/fr/function.popen.php

您还可以使用更多选项或其他功能来更好地控制执行:

http://fr2.php.net/manual/fr/function.proc-open.php

但请谨慎使用,并确保 需要 以这种方式来解决您的问题。

Ajax会很好。

答案 2 :(得分:-1)

你需要异步做事。使用AJAX实现此目的