2013-02-27 88 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