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

时间:2012-10-15 07:57:03

标签: php forms

我想找到一种让用户无需等待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');
}

我希望它不会太模糊。

提前感谢您提供有关我如何做到这一点的任何帮助/建议。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以使用异步请求(ajax)提交表单,并使用javascript处理页面转发。这样您的表单就会异步处理 - 一旦得到答案,您甚至可以等待响应告诉用户。此异步请求不会阻止UI。

只是为了完整性,如果你真的真的只想用这个: Run PHP Task Asynchronously

答案 2 :(得分:1)

这实际上取决于脚本执行的时间,如果是秒,10以下我会做一个ajax请求并有一个模态进度消息

如果他们花费更长的时间,我的方法是创建或使用现有的任务调度程序/报告生成器

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

Example on how to fork php to background

<强>更新

我认为你会从机器人中获得更好的性能,不断检查数据库或文件以进行工作并将结果提交回数据库。在完成/更新所需工作时,通过ajax,Web套接字和/或电子邮件向用户发出警报。

以下是对how to build a web crawler in php

的精彩介绍