2013-02-27 41 views
2

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

我设置的时间限制与

set_time_limit(900); 
我bigint.php文件

,并在本地主机的工作原理。 但在我的虚拟主机,当我试图计算999^999,它产生的错误

Fatal error: Maximum execution time of 10 seconds exceeded in /home/vhosts/mysite.com/http/bigint/bigint.php on line 156

这是我的代码:

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文件的启动以及类的构造函数,没有工作。

我以为这是一个会话问题,关闭我的浏览器并重新打开页面,仍然需要10秒作为时间限制。

我在这里做错了什么?

+0

是不是你的函数写一个非常长的方式'pow($数字,$数字);'? – jeroen 2013-02-27 15:11:05

+0

这只是bigint类中的一个函数。我无法找到一种支持超过20个字符的“数字”的PHP方式。 – marvin 2013-02-27 15:19:38

+0

只是想我会提到它,因为它可能会帮助您优化您的功能; PHP有很多数学函数包括:-) – jeroen 2013-02-27 15:21:56

回答

1

可能是你Apache是​​配置10秒后停止执行,你的的php.ini有一行:

max_execution_time = 10 

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

max_execution_time = 0 

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

set_time_limit(360); 

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

更新

如果网站托管比它取决于托管公司,问他们是否有可能。

另一种方式围绕它是使用Ajax调用来代替,以保持客户端,而不是等待服务器

+0

不用担心队友 – 2013-02-27 15:13:21

+0

谢谢。但我在一个虚拟主机中托管这个文件。我可以更改他们的apache/php配置文件吗? – marvin 2013-02-27 15:18:22

+0

答复已更新。 – Kuf 2013-02-27 15:23:40