【问题标题】:HOW TO make test.php continue with rest of coding without waiting for a function to complete task?如何让 test.php 在不等待函数完成任务的情况下继续其余的编码?
【发布时间】:2014-10-14 02:17:49
【问题描述】:

就是这样。在 test.php,我有一个函数 dotask(a,b,c,d);

此功能需要执行需要 2-4 分钟才能完成的任务。 任务包括向数据库中插入新记录、curl 调用其他 url 来执行任务等。

但是,我希望 test.php : 只要确保 dotask(a,b,c,d) 被调用,不需要等到任务完成然后返回并继续底部的剩余代码。

原因:test.php 是一个感谢页面。我不能指望用户等待几分钟才能完成任务。因为我需要在该页面上向用户显示感谢信息等。

我能做什么?

【问题讨论】:

    标签: php


    【解决方案1】:

    如果没有大量的hackery,您就无法在PHP 中创建一个进程。我建议改用队列和工作模式。看到这个答案:PHP- Need a cron for back site processing on user signup... (or fork process)

    【讨论】:

    • 在 fork PHP 进程方面取得了进展吗?
    【解决方案2】:

    我在这里看到了一些解决方案,要求您传入要运行的页面,例如: BackgroundProcess::fork('process_user.php');

    但我的情况是在 test.php,我有 dotask(a,b,c,d) 我需要从这个站点传入参数以继续工作。

    所以我是否应该将这几个参数传入一个新的 dbtable 调用 pendingprocess,然后在 process_user.php 中,我从数据库中读取并继续执行任务?

    我无法将参数嵌入到 taskpage.php 中...

    我能想到的另一个解决方案是在thankyou.php 我通过将参数传递给process_user.php 来执行一个body onload ajax 调用来执行任务。任何人都可以建议这是否是一个好方法? 当用户在浏览器中单击 STOP 时,进程会停止执行吗?如果他们去刷新浏览器怎么办。

    【讨论】:

    • 是的,使用您需要的任何类型的额外信息在数据库中排队任务。您也可以写入文本文件。做任何看起来最合适的事情来存储信息以供另一个进程获取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多