我刚刚发布了我编写的第一个版本的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);
}
页面上每个图像调用此函数两次。我疯狂的效率低下,还是他们的主人可能很糟糕?
提前感谢您提供的任何帮助。
答案 0 :(得分:2)
while(!(is_numeric($searchWithin[$strOffset])))
没有数字字符, $searchWithin
将运行infinte times !
请注意,问题可能出在其他地方。
为了查明实际问题,我建议您从错误中获取可重现的步骤,并使用profiler来分析代码。你肯定会找到问题所在。
答案 1 :(得分:1)
你有一个无限的while
循环。您只是在不更改$strOffset
的值的情况下递增$searchWithin[$strOffset]
的值,所以如果它不是数字,那么它永远不会,并且会永远陷入循环。
答案 2 :(得分:0)
如果它导致超时,那么你有一个额外的大或无限循环。你在这里有2个循环,检查它们是否是无限的。
如果这不是问题,请通过在脚本开头添加此内容来增加最长执行时间:
ini_set('max_execution_time', 36000); //3600 seconds = 1 hour