php单独运行,避免用户超时



我想找到一种方法,让我的用户不必等待php脚本的输出,也不必在服务器上运行脚本时被重定向到页面。

基本上,用户提交的表单需要很长时间才能处理,我想将用户重定向到一个页面,通知他该表单正在处理中,稍后将提供其输出(我考虑在输出准备好时打开一个选项卡)。

基本上,我想要这样的东西,我尝试过,但没有成功,

if ($form_valid) {
process_form(); // this would need not to be running on the current page so that the user don't have to wait for it to be ready (timeout problems)
header('Location: http://example.com/form_submitted_output_coming_soon.html');
}

我希望它不要太含糊。

事先感谢你对我如何做到这一点的帮助/建议。

这实际上取决于脚本执行所需的时间,如果是秒,在10以下,我会发出ajax请求并获得模式进度消息

如果它们需要较长的时间,我的方法是创建或使用现有的任务调度程序/报告生成器

  • 调用中央管理脚本的单个系统调度任务条目(可能不是最佳)
  • 您标记要执行的任务/报告
  • 并发。计数,限制当前执行的数量(这样就不会使服务器过载)
  • 用户通过ajax为他们的任务/报告进行池,或者通过web套接字推送到客户端

如何将php分叉到后台的示例

更新

我认为机器人程序会不断检查数据库或文件中要做的工作,并将结果提交回数据库,从而获得更好的性能。当用户需要的工作完成/更新时,通过ajax、web套接字和/或电子邮件提醒用户。

这里有一个关于如何在php中构建网络爬虫的好介绍

解决这类问题的最佳方法是使用AJAX在后台向服务器发出请求,然后在用户完成处理后更新用户。

您可以使用异步请求(ajax)提交表单,也可以使用javascript处理页面转发。通过这种方式,您的表单是异步处理的——您甚至可以等待响应,以便在得到答案后告诉用户。此异步请求不会阻止UI。

为了完整起见,如果您真的只想使用php:异步运行PHP任务

最新更新