如何使test.php继续进行其余编码而无需等待函数完成任务?

时间:2009-08-24 03:58:36

标签: php

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

此功能需要完成需要2-4分钟才能完成的任务。 任务包括将新记录插入db,curl调用其他url来执行任务等等。

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

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

我该怎么办?

2 个答案:

答案 0 :(得分:2)

你不能在没有很多hackery的情况下在PHP中派生进程。我建议使用队列和工作模式。请参阅此答案:PHP- Need a cron for back site processing on user signup... (or fork process)

答案 1 :(得分:0)

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

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

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

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

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