如何使用php5-fpm + nginx timeout php.ini处理超时

时间:2012-05-21 01:28:37

标签: php timeout fastcgi

如何在php5-fpm + ngnix配置中使用PHP处理超时?

我尝试用

创建一个简单的脚本
sleep(60);

的php.ini

max_execution_time = 30

fast_cgi

fastcgi_connect_timeout 60;
fastcgi_send_timeout 50;
fastcgi_read_timeout 50;

脚本在50秒停止以便后端超时。我该怎么做

  1. 在php.ini中启用max_execution_time

  2. 启用ini_set将执行时间直接更改为0 脚本

  3. 为什么fast_cgi会控制超时而不是php本身的超时?

3 个答案:

答案 0 :(得分:3)

基本上事实是,在Linux上,超时只计算实际的“php工作”而不是所有流功能时间,而且不是sleep这就是为什么我从未达到限制并且fastgci超时总是被踢而在Windows上,实际的“人”时间已经过去了。

来自PHP doc:

  

set_time_limit()函数和配置指令   max_execution_time仅影响脚本的执行时间   本身。花在执行之外的活动上的任何时间   使用system(),流操作等系统调用的脚本   确定最大值时不包括数据库查询等   脚本运行的时间。在Windows上不是这样   测量时间是真实的。

答案 1 :(得分:0)

尝试在PHP代码中使用set_time_limit

答案 2 :(得分:0)

使用php-cgi(php-fpm)时,php.ini的max_execution_time不会生效,但是 fpm配置项request_terminate_timeout将处理脚本执行时间。

在php-fpm.conf中设置如下项目:

request_terminate_timeout = 60s