在我公司的网站上,我们允许用户通过上传excel文件来上传订单。上传此文件后,将读取详细信息,创建所有必需的订单,然后将一个coloumn,并将所需的订单ID添加到users文件并发送回它们。
我面临的问题是504网关超时。我无法诊断导致超时的原因。
我们有一个HA_PROXY负载均衡器和使用PHP的应用服务器。
我应该如何检测导致超时问题的原因?是HA_PROXY,apache还是用户浏览器?
PS:要发送给用户的返回文件存在于服务器中PHP的临时目录中,但由于连接超时不会发送回用户。
答案 0 :(得分:1)
我很确定它是HA_PROXY
。
我们的设置也是如此:服务器仍然完成了他正在做的事情(所以它不是服务器,set_time_limit(0)
将无法工作),用户只是不再得到答案服务器耗时超过(我猜)HA_PROXY
允许的时间。
如果是服务器,服务器本身的执行将被缩短,您的文件将无法完全上传。
如果是浏览器,使用其他浏览器时会有所不同。
我不知道该怎么办,因为我不是那个维护我们服务器的人,我们从来没有调查它,因为它只发生在cron脚本上(除非调试)无论如何都没有输出。
答案 1 :(得分:1)
如果您需要在实时发回给用户,则需要在文件头部添加此代码。
set_time_limit(0);
根据您的描述,我认为您可以使用异步处理。
上传文件后,您可以向用户回复“处理”。
然后您可以将Ajax请求写入另一个URL以检查该文件是否适合下载,每10秒一次。
stat.php?ID = FILE_ID
如果准备就绪,您可以将页面重定向到下载,例如:
down.php?ID = FILE_ID
答案 2 :(得分:0)
set_time_limit(0)
这种方式可以增加文件上传时间