执行几次相同的PHP脚本,没有超时

时间:2012-11-29 20:22:25

标签: php mysql apache reporting

我正在开发一个应该由客户端显示报告的系统。这些报告需要在显示实际报告之前完成先前的计算。

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

简而言之,我有两个脚本,假设它们被称为'generateReport.php'和'showReport.php'。

当用户点击客户端查看其报告“showReport.php”时,检查是否已生成所需数据,如果已生成,则会显示该报告。 如果数据不存在,它会将浏览器转发到'generateReport.php',完成后,它会将浏览器转发到'showReport.php'

当用户点击两个客户端并且他们都需要生成数据时,就会出现问题。

第一个点击的客户端到达'generateReport.php',用户看到一个栏,让他/她知道整个过程。虽然应该生成第二个客户端的页面就在那里,等待。

如果第一个客户花了太长时间,第二个客户显然超时并且只是停留在那里。

我明白,因为我在同一个浏览器的两个标签上点击相同的php('generateReport.php'),apache不会同时处理这两个请求所以,有没有办法避免第二个(可能是第三个,第四个,等等。)窗口不要超时?

注意:'generateReport.php'和'showReport.php'有set_time_limit(0);只是为了测试,它显然什么也没做。

注意2:我可以在托管环境中访问php.ini

注3:对于冗长/唯一无聊的短信

,感到抱歉

提前Thanx!

EDIT1:

感谢Twisty的回复。

  • 请求由用户点击锚标记由HTTP GET生成。
  • header(“Location:...”)用于将用户从generateReport带到showReport。
  • 我正在引用浏览器标签,是的。

2 个答案:

答案 0 :(得分:0)

Apache会多次运行你的脚本;为什么会关心?

如果生成报告的时间超过2分钟,浏览器本身通常会超时并停止等待。

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

我对第二个用户被阻止的原因没有任何意识,但我认为你的脚本中有一些阻塞。

答案 1 :(得分:0)

谢谢大家!

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

无论如何,Web响应时间永远不应该花费那么长时间,并且Web服务器不应该处理那些漫长的进程。

再次感谢大家的支持!