Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php超时-设置时间限制(0);-don';行不通_Php_Timeout_Execution - Fatal编程技术网

php超时-设置时间限制(0);-don';行不通

php超时-设置时间限制(0);-don';行不通,php,timeout,execution,Php,Timeout,Execution,我的PHP文件有一个问题,需要30秒以上才能执行 搜索后,我添加了set\u time\u limit(0)在代码开始处,C但文件在30秒后仍会超时,并出现500错误 log: PHP Fatal error: Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php safe-mode : off 检查php.ini文件 ini_set('max_execution_time', 300); //300 second

我的PHP文件有一个问题,需要30秒以上才能执行

搜索后,我添加了
set\u time\u limit(0)在代码开始处,C但文件在30秒后仍会超时,并出现
500错误

log: PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php

safe-mode : off
检查php.ini文件

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

ini_set('max_execution_time', 0); //0=NOLIMIT

使用此

签出此,此来自,此可能对您有所帮助

如果使用PHP_CLI SAPI时出现错误“超过N秒的最大执行时间”,其中N是整数值,请尝试每M秒或每次迭代调用set_time_limit(0)。例如:

<?php

require_once('db.php');

$stmt = $db->query($sql);

while ($row = $stmt->fetchRow()) {
    set_time_limit(0);
    // your code here
}

?>

我通常在主循环中使用set\u time\u limit(30)(因此每个循环迭代被限制为30秒,而不是整个脚本)

我在多个数据库更新脚本中这样做,通常需要几分钟来完成,但每次迭代不到一秒钟——保持30秒的限制意味着如果我愚蠢到创建一个无限循环,脚本就不会陷入无限循环

我必须承认,我选择30秒作为限制是有点随意的——我的脚本实际上可以用2秒来代替,但考虑到实际应用程序,我觉得30秒更合适——当然你可以使用任何你认为合适的值


希望这有帮助

这是一个老帖子,但我想我会发布它,因为它在这个问题上帮了我不少忙。从本质上说,服务器配置可以覆盖php配置。从文章中:

例如,mod_fastcgi有一个名为“-idle timeout”的选项,用于控制脚本的空闲时间。因此,如果脚本在那么长的时间内没有向fastcgi处理程序输出任何内容,那么fastcgi将终止它。设置有点像这样:

apachemod_fastcgi php进程

本文还有其他的例子和进一步的解释。希望这对其他人有帮助

你在共享主机上吗?php函数可以通过服务器配置有选择地禁用/限制。能否
echo ini_get('max_execution_time')在您的
设置时间限制后(0)并告诉您得到了什么?httpd.conf中可能设置了
php\u admin\u value max\u execution\u time XX
。所以你不能覆盖这个值。也要明白,正如Marc B.所说,共享主机上可能有限制,所以如果这些功能不能正常工作,请咨询server@MarcB不,我在上班server@goldenparrotecho ini_get('max_execution_time');=0@user1601782我只想更改此文件的限制。不是洞,等等。。。什么?没有
set\u time\u limit()
:A)在每次通话时重置计时器(很好,我知道你要去哪里)。B) 设置为0时不施加时间限制。所以不…这应该标记为正确答案。很可能您将使用循环,并且set_time_limit(0)命令应该位于导致超时的循环的顶部。参数0表示没有时间限制(根据手册),因此脚本可以运行到完成。但是,如果您的脚本运行时间超过30秒,您可能希望重新考虑您的操作方式?注意:set_time_limit()函数和配置指令max_execution_time只影响脚本本身的执行时间。在确定脚本已运行的最长时间时,不包括在脚本执行之外发生的活动上花费的任何时间,例如使用system()的系统调用、流操作、数据库查询等。太棒了!我们怎么修理它?!
<?php

require_once('db.php');

$stmt = $db->query($sql);

while ($row = $stmt->fetchRow()) {
    set_time_limit(0);
    // your code here
}

?>
Apache <-> mod_fastcgi <-> php processes