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