2012-11-29 49 views
0

我正在开发一个系统,应该显示客户端的报告。这些报告需要在显示实际报告之前完成以前的计算。执行多次相同的PHP脚本没有超时

由于计算过程有时是乏味和长,有时,该报告使用数据被刷新时,用户必须能够重新计算这些报告。由于这些原因,生成报告的脚本与实际显示报告的脚本分离。

总之,我有两个剧本,可以说他们是所谓的“generateReport.php”和“showReport.php”。

当用户点击一个客户端上看到它的报告“showReport.php”检查是否需要已经生成,如果是,它会显示报告中的数据。 如果数据不存在,它会将浏览器转发到'generateReport.php',并在完成后将浏览器转发到'showReport.php'

问题出现在用户点击两个客户端时他们都需要生成数据。

首先点击客户端获取到“generateReport.php”,其中用户将看到一个酒吧,让他/她知道整个过程。虽然第二个客户端应该生成的页面就停留在那里,等待。

如果第一个客户端需要很长时间,第二个客户端显然会超时并停留在那里。

我知道,因为im在同一个浏览器的两个选项卡上点击相同的php('generateReport.php'),所以apache不会同时处理这两个请求,是否有办法避免第二个(也可能是第三个,第四个等)。窗口不超时?

注: 'generateReport.php' 和 'showReport.php' 具有参数或者set_time_limit(0);只是为了测试,它显然没有做任何事情。

注2:我有机会为php.ini在我的托管环境

注3:所以对于稍长/只枯燥的文字后

Thanx提前对不起!

EDIT1:

谢谢曲折的回复。

  • 请求由HTTP GET通过用户单击锚标签生成。
  • header(“Location:...”)用于使用户从generateReport到showReport。
  • 我是指浏览器选项卡,是的。
+1

这一切都不是很清楚。用户如何生成请求,请求AJAX或加载页面的链接?用什么方法将用户从generateReport.php带到showReport.php?这听起来像AJAX在这里可能会有所帮助,例如,当用户请求报告时向用户显示工作指标,生成并返回报告并显示报告。当你说'标签'时,你指的是你的页面或单独的浏览器选项卡中的一些元素? – Twisty

+0

谢谢Twisty请参阅我的编辑!在'generateReport.php'上使用AJAX,用户会看到一个进度条,其中包含关于生成脚本正在做什么和剩余时间的评论! –

+0

您需要多久生成一次报告?每天一次?小时? –

回答

0

Apache将运行脚本多次;为什么它会关心?

如果生成报告需要2分钟以上,浏览器本身通常会超时并停止等待。

这里的典型技巧是让“生成”进程在单独的线程中运行,因此它可以在自己的时间内完成。

我不知道为什么第二个用户被阻止,但我认为你的脚本中有阻塞的东西。

0

谢谢大家!

我们已决定在空闲时间运行这些长期任务,并在请求时生成数据。

Web响应时间不应该花那么长时间,Web服务器不应该处理这些长的进程。

再次感谢大家的支持!