PHP超時處理全面總結(2)

發表于:2013-10-28來源:酷勤網作者:不詳點擊數: 標簽:php
說明: 對于一個keep-alive連接上的連續請求,發送第一個請求內容的最大間隔由參數max-read-idle決定,從第二個請求起,發送請求內容的最大間隔由參數ma

  說明:

  對于一個keep-alive連接上的連續請求,發送第一個請求內容的最大間隔由參數max-read-idle決定,從第二個請求起,發送請求內容的最大間隔由參數max-keep-alive-idle決定。請求間的間隔超時也由max-keep-alive-idle決定。發送請求內容的總時間超時由參數read-timeout決定。Lighttpd與后端交互數據的超時由max-connection-idle決定。

  延伸閱讀:

  http://www.snooda.com/read/244

  [ Nginx ]

  配置:nginx.conf

http{

#Fastcgi:(針對后端的fastcgi生效,fastcgi不屬于proxy模式)

fastcgi_connect_timeout5;#連接超時

fastcgi_send_timeout10; #寫超時

fastcgi_read_timeout10;#讀取超時

#Proxy:(針對proxy/upstreams的生效)

proxy_connect_timeout15s;#連接超時

proxy_read_timeout24s;#讀超時

proxy_send_timeout10s; #寫超時

}

  說明:

  Nginx 的超時設置倒是非常清晰容易理解,上面超時針對不同工作模式,但是因為超時帶來的問題是非常多的。

  延伸閱讀:

  http://hi.baidu.com/pibuchou/blog/item/a1e330dd71fb8a5995ee3753.html

  http://hi.baidu.com/pibuchou/blog/item/7cbccff0a3b77dc60b46e024.html

  http://hi.baidu.com/pibuchou/blog/item/10a549818f7e4c9df703a626.html

  http://www.apoyl.com/?p=466

  【PHP本身超時處理】

  [ PHP-fpm ]

  配置:php-fpm.conf

<?xmlversion="1.0"?>

<configuration>

//...

Setsthelimitonthenumberofsimultaneousrequeststhatwillbeserved.

EquivalenttoApacheMaxClientsdirective.

EquivalenttoPHP_FCGI_CHILDRENenvironmentinoriginalphp.fcgi

Usedwithanypm_style.

#php-cgi的進程數量

<valuename="max_children">128</value>

Thetimeout(inseconds)forservingasinglerequestafterwhichtheworkerprocesswillbeterminated

Shouldbeusedwhen'max_execution_time'inioptiondoesnotstopscriptexecutionforsomereason

'0s'means'off'

#php-fpm 請求執行超時時間,0s為永不超時,否則設置一個 Ns 為超時的秒數

<valuename="request_terminate_timeout">0s</value>

Thetimeout(inseconds)forservingofsinglerequestafterwhichaphpbacktracewillbedumpedtoslow.logfile

'0s'means'off'

<valuename="request_slowlog_timeout">0s</value>

</configuration>

  說明:

  在php.ini中,有一個參數max_execution_time可以設置PHP腳本的最大執行時間,但是,在php-cgi(php-fpm)中,該參數不會起效。真正能夠控制PHP腳本最大執行時:

  0s

  就是說如果是使用mod_php5.so的模式運行max_execution_time是會生效的,但是如果是php-fpm模式中運行時不生效的。

  延伸閱讀:

  http://blog.s135.com/file_get_contents/

  [ PHP ]

  配置:php.ini

  選項:

  max_execution_time=30

  或者在代碼里設置:

  ini_set("max_execution_time",30);

  set_time_limit(30);

  說明:

  對當前會話生效,比如設置0一直不超時,但是如果php的safe_mode打開了,這些設置都會不生效。

  效果一樣,但是具體內容需要參考php-fpm部分內容,如果php-fpm中設置了request_terminate_timeout的話,那么max_execution_time就不生效。

  【后端&接口訪問超時】

  【HTTP訪問】

  一般我們訪問HTTP方式很多,主要是:curl,socket,file_get_contents()等方法。

  如果碰到對方服務器一直沒有響應的時候,我們就悲劇了,很容易把整個服務器搞死,所以在訪問http的時候也需要考慮超時的問題。

  [ CURL 訪問HTTP]

  CURL 是我們常用的一種比較靠譜的訪問HTTP協議接口的lib庫,性能高,還有一些并發支持的功能等。

  CURL:

  curl_setopt($ch,opt)可以設置一些超時的設置,主要包括:

  *(重要)CURLOPT_TIMEOUT設置cURL允許執行的最長秒數。

  *(重要)CURLOPT_TIMEOUT_MS設置cURL允許執行的最長毫秒數。(在cURL7.16.2中被加入。從PHP5.2.3起可使用。)

  CURLOPT_CONNECTTIMEOUT在發起連接前等待的時間,如果設置為0,則無限等待。

  CURLOPT_CONNECTTIMEOUT_MS嘗試連接等待的時間,以毫秒為單位。如果設置為0,則無限等待。在cURL7.16.2中被加入。從PHP5.2.3開始可用。

  CURLOPT_DNS_CACHE_TIMEOUT設置在內存中保存DNS信息的時間,默認為120秒。

  curl普通秒級超時:

  $ch=curl_init();

  curl_setopt($ch,CURLOPT_URL,$url);

  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

原文轉自:http://www.kuqin.com/web/20120808/324135.html

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97