情况就是这样。在test.php,我有一个函数dotask(a,b,c,d);
此功能需要完成需要2-4分钟才能完成的任务。 任务包括将新记录插入db,curl调用其他url来执行任务等等。
但是,我想要test.php: 只需要确保调用dotask(a,b,c,d),不需要等到任务完成,然后才返回并继续使用底部的剩余代码。
原因:test.php是一个感谢页面。我不能指望用户等待几分钟才能完成任务。因为我需要在该页面向用户显示感谢信息等。
我该怎么办?
答案 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时,进程是否会停止执行?如果他们去刷新浏览器怎么办。