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); - 不工作的主要内容,如果未能解决你的问题,请参考以下文章