2012-09-28 136 views
0

在我公司的网站上,我们允许用户通过上传Excel文件来上传订单。上传此文件时,会读取详细信息,创建所有必需的订单,然后将具有所需订单id的色标添加到用户文件并发回给他们。文件上传和下载超时

我面临的问题是504网关超时。我无法诊断导致超时的确切原因。

我们有一个使用PHP的HA_PROXY负载平衡器和应用程序服务器。

我该如何检测是什么导致超时问题?是HA_PROXY,apache还是用户浏览器?

PS:要发送给用户的返回文件存在于服务器的PHP的临时目录中,但是因为连接超时未送回给用户。

回答

0
set_time_limit(0) 

通过这种方式来提高文件上传时间

+0

这只会影响到PHP权?让我试试看,如果这有效。但是有没有什么办法来检测究竟是什么原因导致了超时?通过查看日志或其他东西。我正在使用Apache(PHP)和HA_Proxy。它也可以是浏览器。如果没有用户通过查看日志让我知道,我是否能够知道这是否会发生?谢谢。 – kapad

+0

是的,它只是影响PHP。然而,这通常不是一个非常好的解决方案,因为web服务器往往会停止运行时间过长的脚本,除非它是服务器,否则无法编辑脚本。 –

1

我敢肯定它是HA_PROXY

在我们的设置中也得到了这样的结果:服务器仍然完成他正在做的事(所以它不是服务器,并且set_time_limit(0)将不起作用),用户只是没有得到答案,因为它花了服务器比(我猜)HA_PROXY允许。

如果是服务器,服务器本身的执行会被缩短,您的文件将不会被完全上传。

如果是浏览器,使用其他浏览器时会有差异。

我不知道该怎么做,因为我不是维护我们的服务器的人,也从来没有关注过它,因为它只发生在cron脚本上(除非调试),反正没有输出。

+0

好的,谢谢。在ha_proxy配置中有一个这样的设置。我试试看。 – kapad

1

如果您需要实时发回给用户,您需要将此代码添加到文件的头部。

set_time_limit(0); 

从你的描述中,我认为你可以使用异步处理。

当文件上传后,您可以向用户回复“正在处理”。

然后你可以写一个Ajax请求到另一个URL来检查文件是否适合下载,每10秒。 ?

stat.php ID = file_id的

如果准备好了,你可以在页面重定向到下载,如:?

down.php ID = file_id的

+0

我实际上正在考虑将第二种解决方案作为更长期的内容来实施,并且只是在短期内延长暂停时间。你能指点我的任何一种教程或其他一些解释异步方法的文章。谢谢。 – kapad