php 超时 - set_time_limit(0); - 不工作

Posted

技术标签:

【中文标题】php 超时 - set_time_limit(0); - 不工作【英文标题】:php timeout - set_time_limit(0); - don't work 【发布时间】:2012-08-13 12:59:26 【问题描述】:

我的 php 文件有问题,执行时间超过 30 秒。

搜索后,我在代码开头添加了set_time_limit(0);,但文件在30秒后仍然超时并显示500 error

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

safe-mode : off

【问题讨论】:

您在使用共享主机吗? php 功能可以通过服务器配置有选择地禁用/限制。 你能在你的set_time_limit(0); 之后echo ini_get('max_execution_time'); 告诉你得到了什么吗? httpd.conf中可能设置了php_admin_value max_execution_time XX。所以你不能覆盖这个值。 【参考方案1】:

检查 php.ini

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

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

【讨论】:

也明白,正如 Marc B. 所说,共享主机上可能存在限制,所以如果这些功能不能正常工作,请询问服务器管理员跨度> @Marc B 不,我在专用服务器上 @goldenparrot echo ini_get('max_execution_time'); = 0 @user1601782 我只想更改此文件的限制。不是洞口【参考方案2】:

这是一个旧线程,但我想我会发布这个link,因为它在这个问题上帮助了我很多。本质上它的意思是服务器配置可以覆盖 php 配置。来自文章:

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

Apache <-> mod_fastcgi <-> php processes

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

【讨论】:

太棒了!我们如何解决它?!【参考方案3】:

我通常在主循环中使用 set_time_limit(30)(因此每次循环迭代限制为 30 秒,而不是整个脚本)。

我在多个数据库更新脚本中执行此操作,通常需要几分钟才能完成,但每次迭代不到一秒 - 保持 30 秒的限制意味着如果我足够愚蠢,脚本不会陷入无限循环创建一个。

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

希望这会有所帮助!

【讨论】:

【参考方案4】:
ini_set('max_execution_time', 300);

使用这个

【讨论】:

【参考方案5】:

检查一下,这是来自PHP MANUAL,这可能会对你有所帮助。

如果您使用 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_time_limit(): A) 在每次通话时重置计时器(很好,我知道你要去哪里了)。 B)设置为0时没有时间限制。所以...不... 这应该被标记为正确答案。您很可能会使用循环,并且 set_time_limit(0) 命令应该位于导致超时的循环的顶部。参数 0 表示不会施加时间限制(根据手册),因此脚本可以运行直到完成。但是,如果您的脚本运行时间超过 30 秒,您可能希望重新考虑您的工作方式? 来自manual 注意: set_time_limit() 函数和配置指令 max_execution_time 只影响脚本本身的执行时间。在确定脚本运行的最长时间时,不包括在脚本执行之外发生的任何活动所花费的时间,例如使用 system() 的系统调用、流操作、数据库查询等。【参考方案6】:

我认为你必须说限制执行时间到 php ,试试这个。

ini_set('max_execution_time', 0);

【讨论】:

以上是关于php 超时 - set_time_limit(0); - 不工作的主要内容,如果未能解决你的问题,请参考以下文章

PHP set_time_limit函数用法

php几分钟后500错误

PHP file_get_contents 函数超时的几种解决方法

如何增加特定脚本php fpm的请求超时

nginx fastcgi 超时问题

nginx fastcgi 超时问题