我想允许用户发布表单并让它触发其他进程,例如发送电子邮件和执行功能。但是,如果我与提交表单的用户一起内联运行,则表单提交需要很长时间。
如果我在共享托管环境中,我有什么选项可以异步运行进程?
答案 0 :(得分:2)
默认情况下,PHP不支持多线程。
您可以使用AJAX同时发布多个请求。
答案 1 :(得分:2)
我可以看到几个解决方案。
第一种是使用AJAX并将每个动作(运行函数,发送电子邮件等)作为单个http请求处理。
另一种方法是使用cron任务从存储在服务器上的队列中执行这些操作。 cron任务可以设置为每分钟左右运行一次,因此队列将很快处理,但用户不必等待这种情况发生。您可以在文件或数据库中实现队列 - 无论哪种方式最适合您。
您提到了表单提交后的确认步骤 - 在任何一种情况下都不会出现问题。将数据存储在会话中,然后当您到达准备好运行这些操作的阶段时(例如,在确认之后),您可以使用我上面提到的其他方法。
对于AJAX解决方案,您可以将表单中所需的数据存储在最终的html页面上(隐藏的输入中)。每个操作都会被javascript作为单个http请求触发(您可以将它们组合在一起,因为此服务器端脚本的执行对用户是不可见的,因此相对较长的执行时间不会成为问题。)
我可以通过AJAX方法看到两个问题:
由于这些原因,我更喜欢cron解决方案。
答案 2 :(得分:1)
PHP不支持异步线程作为默认值。您可以将文本写入mysql并使用cronjob调用特殊文件,该文件只提交mysql行。
解决此问题的另一种方法:您可以使用AJAX发送请求。通过这种方式,用户看不到需要多长时间来获得响应。
答案 3 :(得分:1)
使用AJAX
发送电子邮件并执行其他功能,例如使用jQuery
库:jQuery.ajax()
AJAX
表示"异步Javascript和XML"并且完全符合您的需求。