php7超时未强制执行

时间:2016-09-18 11:00:43

标签: php apache ubuntu

我一直在寻找过去2天的原因,我在互联网和堆栈上尝试了很多解决方案。

我有一个带有ubuntu 16.04和apache2的专用虚拟机 - >服务器版本:Apache / 2.4.18(Ubuntu)与默认的php安装: php -v

PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ).

phpinfo()函数

PHP Version 7.0.8-0ubuntu0.16.04.2

最近我注意到脚本可以永久运行,没有强制执行超时限制。

我做了一个phpinfo()来获取php.ini文件。我在php.ini里面检查了以下参数:

default_socket_timeout = 60
session.gc_maxlifetime = 1440
max_execution_time = 30
max_input_time = 60

我甚至将它们设置为3秒(max_execution_time,max_input_time和default_socket_timeout),重新启动apache,但没有结果。

以下代码(例如,它不是我尝试的唯一代码)没有超时,它会一直运行直到完成:

echo "<br>initial max_execution_time: " . ini_get('max_execution_time') ;
print_r(set_time_limit(2));
echo " - set_time_limit\n";
echo "<br>initial max_execution_time: " . ini_get('max_execution_time') ;
ini_set('max_execution_time', '1');
echo "<br>initial max_execution_time: " . ini_get('max_execution_time') ;
ini_set('default_socket_timeout','1');
echo "<br>ini_get('default_socket_timeout')". ini_get('default_socket_timeout');
//phpinfo();


set_time_limit(1);
$i = 0;
while(++$i < 1000000001){
        if($i % 100000 == 0){
                echo $i / 100000, "<br/>\n";
        }
}
echo "done.<br/>\n";

输出告诉我超时设置正确,但就像我说的那样,脚本运行32秒而不会被杀死。

为什么没有应用超时的任何想法?

由于

1 个答案:

答案 0 :(得分:0)

max_execution_time不一定转换为http请求将花费多长时间。您的php脚本可以运行其他进程,这些进程不会被计为执行时间。例如,如果运行大型数据库查询,则花费的时间将不会计入max_execution_time。在这些情况下,将强制执行A​​pache超时。在ubuntu上,您的apache2.conf文件应包含以下一行:

Timeout 300 

这是实际的限制,其中包括所有数据库查询,curl请求,exec调用和其他外部进程所花费的时间。