使用函数for condition停止PHP while循环
我正在使用以下函数从一系列重定向中获取最终URL 它在99.8%的时间里工作得很好。我真的不能指出异常,但我相信这与另一端的服务器为每次访问生成一个新的随机URL有关。因此,该脚本陷入无限循环中 要复制此问题,请将使用函数for condition停止PHP while循环,php,while-loop,infinite-loop,Php,While Loop,Infinite Loop,我正在使用以下函数从一系列重定向中获取最终URL 它在99.8%的时间里工作得很好。我真的不能指出异常,但我相信这与另一端的服务器为每次访问生成一个新的随机URL有关。因此,该脚本陷入无限循环中 要复制此问题,请将get\u redirect\u url函数替换为 function get_redirect_url($url){ return $url.'x'; } 问题 如何设置时间或迭代限制 我觉得我什么都试过了。我尝试在while循环中设置一个基于时间的条件来查找下一个URL,
get\u redirect\u url
函数替换为
function get_redirect_url($url){
return $url.'x';
}
问题
如何设置时间或迭代限制
我觉得我什么都试过了。我尝试在while循环中设置一个基于时间的条件来查找下一个URL,但它不起作用,我不知道为什么。像这样
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;
}
函数获取所有重定向($url){
$redirects=array();
$start=time();
while($newurl=get\u redirect\u url($url)&&time()-$start<10){
if(在数组中($newurl,$redirects)){
打破
}
$redirects[]=$newurl;
$url=$newurl;
}
返回$redirects;
}
我也试着像这样计算迭代次数
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;
}
函数获取所有重定向($url){
$redirects=array();
$i=0;
而($newurl=get\u redirect\u url($url)&&$i<10){
if(在数组中($newurl,$redirects)){
打破
}
$redirects[]=$newurl;
$url=$newurl;
$i++;
}
返回$redirects;
}
上面的例子只是许多失败尝试中的两个。我准备好寻求帮助了。提前感谢。只需扫描(一秒钟),您的代码不会显示任何明显的问题,但我想提出一些建议
每当我在控制流语句中看到使用赋值结果的条件时,它总是有一种可疑的味道(好吧,可以说这不是我的风格):
我敢打赌,通过拉出该赋值/条件或任何你想调用它的东西,你的代码将变得更可读、更易于维护,并且很有可能修复你所看到的问题。我假设,你所说的循环是一个真正的循环,因此迭代将不起作用,因为如果url已经在数组中,这里的中断会在递增之前中断
if (in_array($newurl, $redirects)){
break;
}
我不知道定时器为什么不工作。但是通过把$i++循环顶部的code>至少可以改善您的情况。此时存在一个问题:
相反,因为&&
的优先级高于=
。否则,$newurl
将获取条件表达式的结果get\u redirect\u url($url)&&time()-$start<10
,即1
您的计数迭代代码应该可以工作。尝试回显$i.
代码>查看为什么它没有完成。
while ( ($newurl = get_redirect_url($url)) && time()-$start < 10 )