我有一个将数据发送到PHP脚本的webform。
PHP脚本可能需要一段时间来处理数据。我想要做的是将原始数据发送到数据库,然后将访问者重定向到“谢谢”页面,然后继续在后台处理数据。重要的是,即使访问者关闭“谢谢”页面,脚本也必须继续工作。
你能告诉我应该研究哪种解决方案吗?
P.S。如果重要,我会使用nginx + php-fpm。
更新。我找到了有关使用ignore_user_abort(true)的信息。这可能是要走的路吗?
答案 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实现此目的