2012-10-15 20 views
0

我想找个办法把我的用户不必等待一个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'); 
} 

我希望这不是太含糊。

预先感谢您的任何帮助/建议,我怎么能做到这一点。

+0

一个很好的介绍你希望用户能够在网站上执行其他任务,而你正在处理他的请求,或者你想简单地给他某种指示(如:加载器)他的请求正在处理? – Ifthikhan

+0

姆,充其量这将是很好的,如果他能够做别的事情 –

回答

1

这真的取决于脚本需要执行,如果是秒的时间,10下,我会做一个Ajax请求,并有一个模式的进度消息

如果他们采取延长大量的时间我的做法是创建或使用现有的任务调度/报表生成

  • 一个单一的系统计划任务进入呼叫中心管理脚本(可能不是最优的)
  • 标记要执行
  • 并发任务/报告。计数,限制当前执行的数量(这样你就不会在加载服务器)
  • 用户通过AJAX汇集了他们的任务/报告或推送到客户端与网页插座

Example on how to fork php to background

更新

我想你会得到更好的表现出一个机器人连续检查数据库或文件的工作要做,并提交结果回数据库。当他们需要的工作完成/更新时,通过ajax,Web套接字和或电子邮件提醒用户。

这里是how to build a web crawler in php

+0

其实脚本可能需要一些像5分钟... ...但另一方面,发送的数据量不会很大,因为它会是小块的文本。 –

+0

根据你的工作情况,PHP可能不是任务处理的好/最佳选择,对于排队来说可能没问题。我认为你需要更新和澄清你想要做什么样的处理。越详细越好。 – daxroc

+0

我想检查几个(1000+)域是否包含一些文本,脚本运行需要相当长的时间... –

1

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

1

您可以用异步请求(AJAX)表单提交和处理页前进也用JavaScript。通过这种方式,您的表单可以异步处理 - 您甚至可以等待答复,一旦有答案就通知用户。这个异步请求不会阻止用户界面。

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