Nginx + php5-fpm不尊重set_time_limit

时间:2016-02-28 10:13:43

标签: php nginx

PHP set_time_limit即使小于其他限制也不起作用。 例如,以下代码将运行到最后:

<?php
    set_time_limit(5);
    sleep(10);
    echo "Did not work!";
?>

我知道request_terminate_timeoutfastcgi_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。

1 个答案:

答案 0 :(得分:3)

您需要阅读set_time_limit()上的手册:

  

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

这也适用于sleep()命令,也在手册的注释中提到。因此,睡眠时间甚至没有计算在内。在脚本结束时执行sleep命令后,累计时间几乎为零。

您可以尝试使用时间设置,例如运行无限循环并测量从开始到结束脚本所用的时间。