2012-08-17 130 views
21

我的PHP文件出现问题,需要超过30秒才能执行。php timeout - set_time_limit(0); - 不工作

搜索后,我在代码的开始处添加了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 
+4

你在共享主办? PHP的功能可以有选择地禁用/限制服务器配置。 – 2012-08-17 04:17:23

+1

你能回声ini_get('max_execution_time');'在你的'set_time_limit(0);'之后'并且告诉你得到了什么? – Prasanth 2012-08-17 04:20:30

+0

在httpd.conf中可能有'php_admin_value max_execution_time XX'。所以你不能覆盖这个值。 – verybadbug 2013-10-01 23:49:35

回答

21

检查的php.ini

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

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

也明白,正如Marc B.所说,共享主机上可能存在限制,所以如果这些功能不能正常工作,请询问服务器的某个管理员 – 2012-08-17 04:20:55

+0

@Marc B不,我在专用服务器 – user614963 2012-08-17 04:29:06

+1

@goldenparrot echo ini_get('max_execution_time'); = 0 – user614963 2012-08-17 04:29:36

2
ini_set('max_execution_time', 300); 

使用本

1

结帐这一点,这是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 
} 

?> 
+0

等等......什么?没有?'set_time_limit()':A)在每次调用时重置定时器(好,我看你要去哪里)。 B)设置为0时不设时间限制。 所以...不... – Mike 2014-04-11 21:27:26

+0

这应该被标记为正确的答案。很有可能你会使用循环,并且set_time_limit(0)命令应该位于导致超时的循环的顶部。参数0意味着没有时间限制(按照手册),因此脚本可以运行直到完成。但是,如果您的脚本运行时间超过30秒,您可能希望重新考虑自己如何做事? – kurdtpage 2016-02-15 02:36:11

3

我通常使用主循环内参数或者set_time_limit(30)(使得每次循环迭代被限制为30秒,而不是整个脚本)。

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

我必须承认,我选择30秒的限制是有些随意的 - 我的脚本实际上可以用2秒的时间消失,但​​是考虑到实际应用,我感觉更舒适30秒 - 当然,您可以使用任何你觉得适合的价值。

希望这会有所帮助!

5

这是一个古老的线程,但我想我会发布这个link,因为它在这个问题上帮了我很多。本质上,它所说的是服务器配置可以覆盖php配置。从文章:

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

Apache <-> mod_fastcgi <-> php processes 

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