如何在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 秒时停止,以表示后端超时。我该怎么做
在 PHP 中启用max_execution_time.ini
启用 ini_set 直接在脚本
为什么fast_cgi可以控制所有内容的超时而不是 php 本身?
基本上,在 Linux 上,超时只计算在实际的"php 工作"上,而不是所有流函数时间,而且不计sleep
这就是为什么我从未达到限制并且 fastgci 超时总是启动。相反,在Windows上,实际的"人类"经过的时间计数。
来自 PHP 文档:
set_time_limit(( 函数和配置指令 max_execution_time只影响脚本的执行时间 本身。在执行之外发生的活动上花费的任何时间 脚本,例如使用 system(( 的系统调用、流操作、 确定最大值时不包括数据库查询等 脚本运行的时间。这在Windows上不是真的 测量时间是真实的。
尝试在 PHP 代码中使用 set_time_limit。
当php-cgi(php-fpm)
php 使用时.ini max_execution_time
不会生效,但是FPM配置项request_terminate_timeout
将处理脚本执行时间。
在 php-fpm.conf 中,像下面这样设置此项:
request_terminate_timeout = 60s