昨天
一個程序需要導出
條數據
結果發現到
條是
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;
From:http://tw.wingwit.com/Article/program/PHP/201311/21264.html