5

bigint大きな数を計算するために、phpにクラスがあります。時間制限を除けば、うまく機能します。

で制限時間を設定しました

set_time_limit(900);

私のbigint.phpファイルで、それはlocalhostで動作します。しかし、私の Web ホストで 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ファイルの開始とクラスのコンストラクターの両方を入れてみましたが、どれも機能しませんでした。

セッションの問題だと思い、ブラウザを閉じてページを開き直しましたが、制限時間として 10 秒かかります。

ここで何が間違っていますか?

4

2 に答える 2

4

「PHP がセーフ モードで実行されている場合、この関数は効果がありません。セーフ モードをオフにするか、php.ini の時間制限を変更する以外に回避策はありません。」- http://php.net/manual/en/function.set-time-limit.php

チェックしてください。

于 2013-02-27T15:08:26.337 に答える
2

おそらくあなたのApacheは10秒後に実行を停止するように設定されています.php.iniに次の行がありますか?

max_execution_time = 10

その場合、タイムアウトを無効にするには (推奨されません)、次のように変更します。

max_execution_time = 0

または任意の整数制限まで:

set_time_limit(360);

詳細については、php マニュアルを参照してください。通常、0 に設定することはお勧めできません。たとえば、存在しないリソースを待機している場合、サーバー プロセスが停止する可能性があるためです。

アップデート

ホスティング会社に依存するよりもサイトがホストされている場合は、可能かどうか尋ねてください。

それを回避する別の方法は、代わりに ajax 呼び出しを使用して、サーバーの代わりにクライアントを待機させることです。

于 2013-02-27T15:08:14.350 に答える