3

私が書いた WordPress プラグインの最初のバージョンをリリースしたばかりですが、私のプラグインを使用している人の少なくとも 1 人が、次のコード ブロックを引用して実行タイムアウト エラーを受け取っているというレポートを受け取りました。

function getNumericAttributeFromHTML($htmlElement, $attribute){
    $attrStartPos = stripos($htmlElement, $attribute) + strlen($attribute);

    $strOffset = 0;
    $searchWithin = substr($htmlElement, $attrStartPos);

    while(!(is_numeric($searchWithin[$strOffset]))){
        $strOffset++;
    }
    $attrStartPos += $strOffset;

    $strOffset = 0;
    $searchWithin = substr($htmlElement, $attrStartPos);

    while((is_numeric($searchWithin[$strOffset]))){
        $strOffset++;
    }

    return substr($htmlElement, $attrStartPos, $strOffset);
}

この関数は、ページ上の画像ごとに 2 回呼び出されます。私は非常に効率が悪いのでしょうか、それとも彼らのホストが単にひどいのでしょうか?

ご協力いただきありがとうございます。

4

3 に答える 3

2

while(!(is_numeric($searchWithin[$strOffset])))数字がない場合、無限回実行されます!$searchWithin

問題は別の場所にある可能性があることに注意してください。

実際の問題を特定するには、バグから再現可能な手順を取得し、プロファイラーを使用してコードをプロファイリングすることをお勧めします。どこに問題があるのか​​、きっと見つかります。

于 2012-10-18T18:52:59.943 に答える
1

無限whileループがあります。$strOffsetの値を変更せずにの値をインクリメントしているだけな$searchWithin[$strOffset]ので、数値でない場合は決して数値ではなく、永遠にループしてしまいます。

于 2012-10-18T18:44:45.763 に答える
0

タイムアウトの原因となっている場合は、非常に大きなループまたは無限ループがあります。ここに 2 つのループがあります。それらが無限かどうかを確認してください。

これが問題でない場合は、スクリプトの開始時にこれを追加して、最大実行時間を増やします。

ini_set('max_execution_time', 36000); //3600 seconds = 1 hour
于 2012-10-18T18:46:44.537 に答える