3

如何在 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

为什么 fast_cgi 可以控制一切而不是 php 本身的超时?

4

3 回答 3

3

这基本上是这样一个事实,在 Linux 上,超时仅适用于实际的“php 工作”,而不适用于所有流函数时间,而且不是因为sleep这就是我从未达到限制并且 fastgci 超时总是启动的原因。相反,在 Windows 上,实际的“人类”经过的时间很重要。

来自 PHP 文档:

set_time_limit() 函数和配置指令 max_execution_time 只影响脚本本身的执行时间。在确定脚本运行的最长时间时,不包括在脚本执行之外发生的任何活动所花费的时间,例如使用 system() 的系统调用、流操作、数据库查询等。在测量时间是真实的 Windows 上,情况并非如此。

于 2012-05-23T12:14:24.753 回答
0

尝试在您的 PHP 代码中使用set_time_limit 。

于 2012-05-21T14:02:44.210 回答
0

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

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

request_terminate_timeout = 60s
于 2016-07-19T11:26:46.997 回答