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

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP를 사용하여 MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까?

데이터베이스에서 Java 열거 유형의 애플리케이션 시나리오는 무엇입니까?

MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법
