while是php里面用的最多的一个函数,但是观察了很久,但是很多人用习惯了,并不知道里面是怎么回事,只是习惯性打上去;FBDHTML5中文学习网 - HTML5先行者学习网
先测一下一秒中,while可以运行多少次循环;FBDHTML5中文学习网 - HTML5先行者学习网
$time1 = microtime(true);FBDHTML5中文学习网 - HTML5先行者学习网
$i =0;FBDHTML5中文学习网 - HTML5先行者学习网
while(1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
$i++;FBDHTML5中文学习网 - HTML5先行者学习网
if(microtime(true)- $time1 >1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
echo $i;FBDHTML5中文学习网 - HTML5先行者学习网
exit();FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
?>FBDHTML5中文学习网 - HTML5先行者学习网
运行结果FBDHTML5中文学习网 - HTML5先行者学习网
389443;FBDHTML5中文学习网 - HTML5先行者学习网
while是当whle括号里面的条件成立的话,就执行,这是绝对正确的FBDHTML5中文学习网 - HTML5先行者学习网
所以while(1)就是无限循环;FBDHTML5中文学习网 - HTML5先行者学习网
实例1:FBDHTML5中文学习网 - HTML5先行者学习网
$sql = "select * from table";FBDHTML5中文学习网 - HTML5先行者学习网
$result = mysql_query($sql);FBDHTML5中文学习网 - HTML5先行者学习网
while($arr = mysql_fetch_assoc($result))FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
这一个理解是当while括号里面$arr = mysql_fetch_assoc($result);成立的情况下,就会一直往下运行;FBDHTML5中文学习网 - HTML5先行者学习网
$arr = mysql_fetch_assoc($result);FBDHTML5中文学习网 - HTML5先行者学习网
当执行这个查询的话,第一次,指针就对准第一行,如果第二次查询的时候,他就会对准第二行,一直找到没有结果,返回false就不会执行了FBDHTML5中文学习网 - HTML5先行者学习网
错误写法:FBDHTML5中文学习网 - HTML5先行者学习网
$sql = "select * from table";FBDHTML5中文学习网 - HTML5先行者学习网
$result = mysql_query($sql);FBDHTML5中文学习网 - HTML5先行者学习网
$arr = mysql_fetch_assoc($result));FBDHTML5中文学习网 - HTML5先行者学习网
while($arr = mysql_fetch_assoc($result))FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
这样执行过来的结果就会少了一行;FBDHTML5中文学习网 - HTML5先行者学习网
实例2:两分算法FBDHTML5中文学习网 - HTML5先行者学习网
while($ip1num>$ipNum $ip2num<$ipNum)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
这是discuz里面取得ip地址对应的真实地址的functionFBDHTML5中文学习网 - HTML5先行者学习网
附件里面有这个function的文件包FBDHTML5中文学习网 - HTML5先行者学习网
简单的拆成FBDHTML5中文学习网 - HTML5先行者学习网
while($a>1 $b <1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
再拆FBDHTML5中文学习网 - HTML5先行者学习网
while($a >1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
while($b<1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
如果$a 是先有值的情况下,FBDHTML5中文学习网 - HTML5先行者学习网
如果$a =1;FBDHTML5中文学习网 - HTML5先行者学习网
那样就执行不下去,条件不成立FBDHTML5中文学习网 - HTML5先行者学习网
或者$a =2;FBDHTML5中文学习网 - HTML5先行者学习网
这样就无限循环了;FBDHTML5中文学习网 - HTML5先行者学习网
重点FBDHTML5中文学习网 - HTML5先行者学习网
如果$a没有先附值FBDHTML5中文学习网 - HTML5先行者学习网
刚开始我一直以为是错误,但是实际上他不会有错误,FBDHTML5中文学习网 - HTML5先行者学习网
这是php不同的地方FBDHTML5中文学习网 - HTML5先行者学习网
简单通过一个程序测试一下FBDHTML5中文学习网 - HTML5先行者学习网
$i =0;FBDHTML5中文学习网 - HTML5先行者学习网
while($a<1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
$i++;FBDHTML5中文学习网 - HTML5先行者学习网
if(microtime(true)- $time1 >1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
echo $i;FBDHTML5中文学习网 - HTML5先行者学习网
$a =1;FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
?>FBDHTML5中文学习网 - HTML5先行者学习网
运行结果FBDHTML5中文学习网 - HTML5先行者学习网
272487;FBDHTML5中文学习网 - HTML5先行者学习网
while($a <1)FBDHTML5中文学习网 - HTML5先行者学习网
他会一直执行,直到程序里面括号里面重新得到一个值$a =1;FBDHTML5中文学习网 - HTML5先行者学习网
$a<1不成立,他才会停止运行;FBDHTML5中文学习网 - HTML5先行者学习网
所以FBDHTML5中文学习网 - HTML5先行者学习网
while($a>1 $b <1)FBDHTML5中文学习网 - HTML5先行者学习网
{FBDHTML5中文学习网 - HTML5先行者学习网
}FBDHTML5中文学习网 - HTML5先行者学习网
的理解是当括号内部执行到$a<=1同时$b>=1两个条件分成成立的情况下执行才中止执行FBDHTML5中文学习网 - HTML5先行者学习网
这样就是双分算法了FBDHTML5中文学习网 - HTML5先行者学习网
如果这两个都理解的话,基本上while就非常清楚了FBDHTML5中文学习网 - HTML5先行者学习网
while(1)非常 庞大的,FBDHTML5中文学习网 - HTML5先行者学习网
本来想帖一个dos的攻击源代码出来,但是感觉如果不小心文章推广得太开,到时候就麻烦了。FBDHTML5中文学习网 - HTML5先行者学习网
dos源码非常 简单,只要上面理解了,非常 容易就可以写一个出来;FBDHTML5中文学习网 - HTML5先行者学习网
ddos就是通过一个调用主控,调用不同服务器网站上面的程序,让他们同时运行,就形成了dos,关键是鸡的数量;FBDHTML5中文学习网 - HTML5先行者学习网
FBDHTML5中文学习网 - HTML5先行者学习网FBDHTML5中文学习网 - HTML5先行者学习网