PHP 限定脚本执行时长的方式有几种,下面说下 php.ini 中的 max_execution_time 和 php-fpm.conf 中的 request_terminate_timeout
1. php.ini 中的 max_execution_time
; Maximum execution time of each script, in seconds ; http://php.net/max-execution-time ; Note: This directive is hardcoded to 0 for the CLI SAPI max_execution_time = 1
上面是 php.ini 配置文件中的 max_execution_time 及其说明,上面说了,这个值限定了脚本的最大执行时间 (单位是秒)
set_time_limit()
函数和配置指令max_execution_time
只影响脚本本身执行的时间。任何发生在诸如使用 system () 的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的 Windows 中,情况就不是如此了。
2. php-fpm.conf 中的 request_terminate_timeout
; The timeout for serving a single request after which the worker process will ; be killed. This option should be used when the 'max_execution_time' ini option ; does not stop script execution for some reason. A value of '0' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ;request_terminate_timeout = 0 request_terminate_timeout = 4s
设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的
max_execution_time
因为某些特殊原因没有中止运行的脚本有用。设置为 ‘0’ 表示 ‘Off’。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。
通过上面两个说明及实验验证得出结论,max_execution_time=1,不一定 1s 后就会中止脚本,可能是 2s、3s 甚至更长的时间;而 request_terminate_timeout=4 则就会在 4s 后中止脚本的执行。所以在配置超时时间的时候,最好两个都配置,max_execution_time 时间短一点,而 request_terminate_timeo