gpt4 book ai didi

未强制执行 php7 超时

转载 作者:行者123 更新时间:2023-12-04 18:46:11 30 4
gpt4 key购买 nike

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

我有一个带有 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 秒而没有被杀死。

任何想法为什么不应用超时?

谢谢

最佳答案

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

Timeout 300 

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

关于未强制执行 php7 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39556918/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com