昨天
一个程序需要导出
条数据
结果发现到
条是
Nginx报出
Gateway Timeout错误
原来PHP
Fcgi下的设置执行时间与isapi的不同
一般情况下设置PHP脚本执行超时的时间
一在phpini里面设置
max_execution_time = ;
二通过PHP的ini_set 函数设置
ini_set("max_execution_time" "");
三通过set_time_limit 函数设置
set_time_limit();
PHPFcgi下PHP的执行时间设置方法
昨天一个程序需要导出条数据结果发现到条是Nginx报出 Gateway Timeout错误
经观察发现大约秒时超时phpini中执行时间配置已经是秒
复制代码 代码如下:max_execution_time =
再查nginx的相关配置无果
写了一个php的测试页再测
复制代码 代码如下:
echo
aaa
;
set_time_limit(
);
sleep(
);
echo
aa
;
依然超时可以确定set_time_limit这个函数没生效
再查phpfcgi的配置phpfpmconf下边这个设置疑似有问题
复制代码 代码如下:
<VALUE name="request_terminate_timeout">
s</VALUE>
查官方文档
复制代码 代码如下:
request_terminate_timeout
The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when
max_execution_time
ini option does not stop script execution for some reason
Default: "
s"
Note:
s
means
off
大意是php中set_time_limit设置的时间内如果php还没执行完则走此处的配置也就是request_terminate_timeout=秒
先把这个参数改的和php中set_time_limit值一样都是秒还不行不理解为什么如果高手知道请赐教
最终把request_terminate_timeout关闭程序可以正常执行了问题解决
复制代码 代码如下:<VALUE name="request_terminate_timeout">
s</VALUE>
补充如果前端的nginx服务器使用了upstream负载均衡那个负载均衡配置中以下几个参数也需要相应修改
复制代码 代码如下:
proxy_connect_timeout
s;
proxy_send_timeout
s;
proxy_read_timeout
s;