set_time_limit不起作用

时间:2013-02-27 15:05:56

标签: php performance time-limiting

我在php中有一个bigint类来计算大数字。除了时间限制外,它运作良好。

我用

设置时间限制
set_time_limit(900);

在我的bigint.php文件中,它可以在localhost中使用。 但是在我的网络主机中,当我尝试计算999 ^ 999时,它会产生错误

  

致命错误:第156行的/home/vhosts/mysite.com/http/bigint/bigint.php超过了最长执行时间10秒

这是我的代码:

public function Multiply_Digit($digit){ //class function of bigint
if($digit==0){$this->str="0";}
else
{
$len=$this->length();
$Result = new bigint("0");
                $carry=0;
                $current;
/*line 156:*/   for ($i = 0; $i < $len; $i++)
                {
                    $current = $this->str[$len-$i-1] * $digit;                    
                    if ($i == 0) { $Result->str = ""+(($current + $carry) % 10); }
                    else{ $Result->str .= ""+(($current + $carry) % 10); }                                        
                    $carry = (($current+$carry) - ($current+$carry)%10)/10;
                }
                $Result->str .= ""+$carry;                
                $Result->str = strrev($Result->str);
                $Result->TrimLeadingZeros();                
                $this->str = $Result->str;//sacma oldu.
                }//else. digit not zero
}//Multiply_Digit()

我尝试将set_time_limit(900);放在php文件的启动和class的构造函数中,没有用。

我认为这是一个会话问题,关闭了浏览器并重新打开了页面,但是时间限制还需要10秒。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

“当PHP在安全模式下运行时,此功能无效。除了关闭安全模式或更改php.ini中的时间限制外,没有其他解决方法。” - http://php.net/manual/en/function.set-time-limit.php

检查一下。

答案 1 :(得分:1)

可能你的apache配置为在10秒后停止执行,你的 php.ini 是否有这条线:

max_execution_time = 10

如果是这样,要禁用超时(不推荐),请将其更改为:

max_execution_time = 0

或您选择的任何整数限制:

set_time_limit(360);

您可以在php manuals了解更多信息。通常,将其设置为0并不是一个好主意,因为例如,等待不存在的资源,服务器进程可能会卡住。

<强>更新

如果网站托管的次数取决于托管公司,请询问他们是否可以。

另一种方法是使用ajax调用来保持客户端等待而不是服务器