PHP中的共享托管异步任务

时间:2014-09-03 07:37:15

标签: php asynchronous

我想允许用户发布表单并让它触发其他进程,例如发送电子邮件和执行功能。但是,如果我与提交表单的用户一起内联运行,则表单提交需要很长时间。

如果我在共享托管环境中,我有什么选项可以异步运行进程?

4 个答案:

答案 0 :(得分:2)

默认情况下,PHP不支持多线程。

您可以使用AJAX同时发布多个请求。

答案 1 :(得分:2)

我可以看到几个解决方案。

  1. 第一种是使用AJAX并将每个动作(运行函数,发送电子邮件等)作为单个http请求处理。

  2. 另一种方法是使用cron任务从存储在服务器上的队列中执行这些操作。 cron任务可以设置为每分钟左右运行一次,因此队列将很快处理,但用户不必等待这种情况发生。您可以在文件或数据库中实现队列 - 无论哪种方式最适合您。

  3. 您提到了表单提交后的确认步骤 - 在任何一种情况下都不会出现问题。将数据存储在会话中,然后当您到达准备好运行这些操作的阶段时(例如,在确认之后),您可以使用我上面提到的其他方法。

    对于AJAX解决方案,您可以将表单中所需的数据存储在最终的html页面上(隐藏的输入中)。每个操作都会被javascript作为单个http请求触发(您可以将它们组合在一起,因为此服务器端脚本的执行对用户是不可见的,因此相对较长的执行时间不会成为问题。)

    我可以通过AJAX方法看到两个问题:

    1. 这取决于Javascript,可以在用户的​​浏览器上禁用。
    2. 用户可以在完成所有操作之前离开页面。
    3. 由于这些原因,我更喜欢cron解决方案。

答案 2 :(得分:1)

PHP不支持异步线程作为默认值。您可以将文本写入mysql并使用cronjob调用特殊文件,该文件只提交mysql行。

解决此问题的另一种方法:您可以使用AJAX发送请求。通过这种方式,用户看不到需要多长时间来获得响应。

答案 3 :(得分:1)

使用AJAX发送电子邮件并执行其他功能,例如使用jQuery库:jQuery.ajax()


AJAX表示"异步Javascript和XML"并且完全符合您的需求。