脚本宝典收集整理的这篇文章主要介绍了AWS ec2上的504网关超时,不执行长PHP脚本,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的服务器和AWS环境.
>运行带有apache服务器(2.4.12)的PHP代码(5.4.40)的amazon Linux的ec2实例,用于为客户端的api调用服务.
> AWS弹性负载均衡器,用于平衡我的某个实例的流量. (现在,我只有一个实例,如果我需要更多实例来处理流量,只需为将来设置ELB.)
>用于保存数据的AWS rds数据库(MysqL 5.6.21).
# ELB idle timeout => 300 # PHP.ini max_execution_time => 301 max_input_time => 301 # httpd conf MaxKeepAliveRequests => 100 KeepAliveTimeout => 30
但是所有这些对我来说都没有用,有时它仍会得到504网关超时.
我的PHP脚本不是一个很长的脚本,它只是从3个表中获取来自MysqL数据库(AWS RDS)的数据并将数据返回给客户端,没有上传文件或生成大文件,所以我认为执行时间不是问题.
奇怪的是,504网关超时错误并不总是发生,大部分时间都是正常的,只是发生了一些,现在,我仍然不明白504错误何时会发生,这真的很奇怪,如果有人能给我一些关于如何解决这个问题的建议,对我来说真的是一个大忙.
我刚刚在我的PHP代码中发现了一个问题,我认为这是带有自动加载问题的命名空间.
我在同一个文件夹中有2个PHP文件,它意味着2个具有相同命名空间的类
文件:
My/namespace - Class1.PHP - Class2.PHP
类和命名空间:
1类
// Class1 namespace My\Namespace; class Class1 { public static function getInstance() { //return... } }
等级2
// Class2 namespace My\Namespace; class Class2 { public static function getInstance() { //return... } public function getClass1Instance() { $class1 = Class1::getInstance(); return $class1; } }
在Class2.PHP中我尝试调用Class1的静态函数,但我没有添加“use namespace”,所以我将以下行添加到Class2.PHP
use My\Namespace\Class1;
问题解决了!但我仍然不确定为什么我应该在Class2.PHP中添加“use namespace”,Class1和Class2都在同一个命名空间中,如果我添加“use namespace”,即使它们在同一个命名空间中也是如此?
附:我发现这个命名空间问题,因为当504网关错误发生时,我试图在短时间内多次调用API,并显示PHP错误消息并告诉我
希望我提供关于这个问题的足够信息,并感谢所有留下评论或回答我的问题的人,m(_ _)m
以上是脚本宝典为你收集整理的AWS ec2上的504网关超时,不执行长PHP脚本全部内容,希望文章能够帮你解决AWS ec2上的504网关超时,不执行长PHP脚本所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。