主页 > 知识库 > 网络编程 > PHP >

PHP

PHP超时处理全面总结(2)

来源:未知 作者:天涯 发表于:2012-08-15 08:40  点击:
Nginx 配置:nginx.conf http { #Fastcgi: (针对后端的fastcgi 生效, fastcgi 不属于proxy模式) fastcgi_connect_timeout 5 ; #连接超时 fastcgi_send_timeout 10 ; #写超时 fastcgi_read_timeout 10 ; #读取超时 #

 

Nginx

配置:nginx.conf

http { 
    #Fastcgi: (针对后端的fastcgi 生效, fastcgi 不属于proxy模式)
    fastcgi_connect_timeout 5;    #连接超时
    fastcgi_send_timeout 10;       #写超时
    fastcgi_read_timeout 10;        #读取超时
 
    #Proxy: (针对proxy/upstreams的生效)
    proxy_connect_timeout 15s;    #连接超时
    proxy_read_timeout 24s;          #读超时
    proxy_send_timeout 10s;         #写超时
}

说明:

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

<?xml version="1.0" ?>
<configuration>
//...
  Sets the limit on the number of simultaneous requests that will be served.
  Equivalent to Apache MaxClients directive.
  Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
  Used with any pm_style.
  #php-cgi的进程数量
  <value name="max_children">128</value>
 
 
  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
  '0s' means 'off'
 #php-fpm 请求执行超时时间,0s为永不超时,否则设置一个 Ns 为超时的秒数
  <value name="request_terminate_timeout">0s</value>
 
  The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
  '0s' means 'off'
  <value name="request_slowlog_timeout">0s</value>
 
</configuration>

说明:

在 php.ini 中,有一个参数 max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时:

 

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

 

就是说如果是使用 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 就不生效。

有帮助
(1)
50%
没帮助
(1)
50%