【发布时间】:2016-09-18 11:00:43
【问题描述】:
过去 2 天我一直在寻找原因,我在互联网上和堆栈上尝试了很多解决方案。
我有一个带有 ubuntu 16.04 和 apache2 的专用 VM -> 服务器版本: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 秒而没有被杀死。
任何想法为什么不应用超时?
谢谢
【问题讨论】:
-
感谢您的回复。这个帖子stackoverflow.com/questions/5874950/… 说即使在 CLI 超时也应该有效。我不知道有 2 种类型的 php 安装(有和没有 CLI)
-
但是等等,CLI 的意思是命令行界面,对吧?我的脚本在 chrome 或 ffox 等浏览器中执行。这应该从 php.ini 获得超时,或者?
-
我检查了所有 php.ini 文件,都最多 30 秒。但是 phpinfo() 应该显示正在使用的那个,我检查了那个。 (我在服务器上找到了可能在任何地方的任何 php.ini 文件)
-
没错,那我就迷路了
-
不用担心,感谢您的宝贵时间。真的很感激。