【发布时间】:2023-04-01 15:38:01
【问题描述】:
我正在使用以下函数从一系列重定向中获取最终 URL...
https://stackoverflow.com/a/4102293/1183476
它在 99.8% 的时间里都很好用。我无法真正确定异常,但我相信它与另一端的服务器为每次访问生成一个新的随机 URL 有关。因此,该脚本陷入了无限循环。
要复制问题,请将 get_redirect_url 函数替换为...
function get_redirect_url($url){
return $url.'x';
}
问题
如何设置时间或迭代限制?
我觉得我已经尝试了一切。我尝试在查找下一个 URL 的 while 循环中放置一个基于时间的条件,但它不起作用,我不知道为什么。像这样……
function get_all_redirects($url){
$redirects = array();
$start = time();
while ($newurl = get_redirect_url($url) && time()-$start < 10 ){
if (in_array($newurl, $redirects)){
break;
}
$redirects[] = $newurl;
$url = $newurl;
}
return $redirects;
}
我也试过这样计算迭代次数...
function get_all_redirects($url){
$redirects = array();
$i = 0;
while ($newurl = get_redirect_url($url) && $i < 10 ){
if (in_array($newurl, $redirects)){
break;
}
$redirects[] = $newurl;
$url = $newurl;
$i++;
}
return $redirects;
}
以上示例只是众多失败尝试中的 2 次。我准备好寻求帮助了。提前致谢。
【问题讨论】:
-
您的计数交互代码应该可以工作。试试
echo $i.'<br>';看看为什么没有完成。
标签: php while-loop infinite-loop