PHP set_time_limit即使小于其他限制也不起作用。 例如,以下代码将运行到最后:
<?php
set_time_limit(5);
sleep(10);
echo "Did not work!";
?>
我知道request_terminate_timeout
和fastcgi_read_timeout
,但这些情况与此无关。
如何让nginx + php5-fpm尊重时间限制我正在设置?
我有两种默认配置:
Nginx的:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
PHP5-FPM:
Default config, no limit specified (request_terminate_timeout = 0)
PHP:
max_execution_time = 30
虽然在php-fpm documentation中说request_terminate_timeout
:"This option should be used when the 'max_execution_time' ini option does not stop script execution for some reason."
我仍然想找到解决这个问题的方法......
注意:我正在使用Ubuntu 14.04,Nginx 1.4.6和PHP 5.5。
答案 0 :(得分:3)
您需要阅读set_time_limit()上的手册:
set_time_limit()函数和配置指令 max_execution_time仅影响脚本的执行时间 本身。花在执行之外的活动上的任何时间 使用system(),流操作等系统调用的脚本 确定最大值时,数据库查询等不包括 脚本运行的时间。
这也适用于sleep()
命令,也在手册的注释中提到。因此,睡眠时间甚至没有计算在内。在脚本结束时执行sleep命令后,累计时间几乎为零。
您可以尝试使用时间设置,例如运行无限循环并测量从开始到结束脚本所用的时间。