0

我想找到一种方法让我的用户不必等待 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');
}

我希望它不会太模糊。

预先感谢您对我如何做到这一点的任何帮助/建议。

4

3 回答 3

1

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

于 2012-10-15T07:58:38.177 回答
1

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

如果您真的只想为此使用 php,则仅出于完整性考虑: 异步运行 PHP 任务

于 2012-10-15T07:59:48.337 回答
1

这真的取决于脚本执行所需的时间,如果它是几秒钟,在 10 岁以下我会做一个 ajax 请求并有一个模态进度消息

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

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

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

更新

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

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

于 2012-10-15T08:04:32.160 回答