3

我刚刚发布了我编写的 WordPress 插件的第一个版本,我收到了一份报告,称至少有一个使用我的插件的人收到了执行超时错误,引用了以下代码块:

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);
}

页面上的每个图像调用此函数两次。我是不是效率太低了,还是他们的主人很糟糕?

提前感谢您提供的任何帮助。

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 回答