我正在创建一个在线评委。我正在使用IDEONE API来编译该文件。因此,当我的用户上传文件时,有一个函数可以获取文件并使用IDEONE API编译文件。但问题是在编译文件时,如果我的用户点击一个新链接,编译仍然是半完成的。有没有办法在用户重定向之前确保函数完全执行?
我的第一个想法是创建一个线程并让线程进行编译。当线程运行时,我可以向用户显示一个新视图。但显然你不能在PHP中运行一个线程,所以我没有想法。
答案 0 :(得分:1)
在PHP中,当某些事情完成时,确实没有办法确保用户留在页面上。
您最好的选择是将编译工作转移到后台进程。一种方法是使用您要处理的信息在数据库中插入一行。您可以立即向用户显示一条消息,说明他们的作业已被放入队列中,并且很快就会得到处理。然后设置Cron以从数据库中获取信息,并向您的API发出请求。完成后,再次更新数据库以指示作业已完成。如果这是一个特别长时间运行的过程,您可以通过电子邮件向用户表明他们的工作已经完成,这样他们就不必等待。
总体而言,您的目标是为用户提供有关正在发生的事情的良好反馈,同时不会以导航用户可能丢失的方式运行您的流程。