php求一個網(wǎng)段開始與結(jié)束IP地址的方法
本文實例講述了php求一個網(wǎng)段開始與結(jié)束IP地址的方法。分享給大家供大家參考。具體如下:
比如:網(wǎng)段(192168.1.5/24),其子網(wǎng)掩碼根據(jù)24劃分為:
11111111.11111111.11111111.00000000(255.255.255.0)
說明:IP地址為32bits,24在劃分網(wǎng)段中就表示前面有24個1,后面有8個0.
開始IP地址的算法是:192.168.1.5的二進(jìn)制與子網(wǎng)掩碼的二進(jìn)制進(jìn)行“與”運算出來的。
結(jié)束IP地址的算法是:子網(wǎng)掩碼的二進(jìn)制先取反,然后和192.168.1.5的二進(jìn)制進(jìn)行“或”運算
實際的就應(yīng)用中,那樣得出的是網(wǎng)絡(luò)地址和廣播地址,網(wǎng)絡(luò)地址+1才是第一個主機(jī)地址,廣播地址-1為最后一個主機(jī)地址。
<?php function mask2bin($n) { $n = intval($n); if($n<0||$n>32) die('error submask'); return str_repeat("1", $n).str_repeat("0",32-$n); } function revBin($s) { $p=array('0','1','2'); $r=array('2','0','1'); return str_replace($p,$r,$s); } function startIp($str,$bSub) { $bIp = decbin($str); $bIp = str_pad($bIp,8,"0",STR_PAD_LEFT); $sIp = bindec($bIp & $bSub); return $sIp; } function endIp($str,$bSub) { $bIp = decbin($str); $bIp = str_pad($bIp,8,"0",STR_PAD_LEFT); $eIp = bindec($bIp | revBin($bSub)); return $eIp; } $ip = array('192','168','1','5');//設(shè)定IP地址,可以從表單獲取,這里只作演示 $mask = '24'; //設(shè)置掩碼 $bSub = mask2bin($mask); //將子網(wǎng)掩碼轉(zhuǎn)換二進(jìn)制 $mask = array(); $mask[] = substr($bSub,"0",8); //將子網(wǎng)掩碼每8位分一段 $mask[] = substr($bSub,"8",8); $mask[] = substr($bSub,"16",8); $mask[] = substr($bSub,"24",8); echo '<table summary="result" border="1" cellspacing="1" cellpadding="0" > <tbody> <td align="right" ><font size="2">掩碼:</font></td> <td> <font size="2">'; for ($i=0;$i<4;$i++) { echo bindec($mask[$i]); if($i!=3) echo "."; } echo '</font> </td> </tr> <tr> <td align="right"><font size="2">網(wǎng)絡(luò)地址:</font></td> <td> <font size="2">'; for ($i=0;$i<4;$i++) { echo startIp($ip[$i],$mask[$i]); if($i!=3) echo "."; } echo '</font> </td> </tr> </td> </tr> <tr> <td align="right"><font size="2">第一個可用:</font></td> <td> <font size="2">'; for ($i=0;$i<3;$i++) { echo startIp($ip[$i],$mask[$i]); echo "."; } $ip_4 = startIp($ip[3],$mask[3]); echo ++$ip_4; echo '</font> </td> </tr> <tr> <td align="right"><font size="2">最后可用:</font></td> <td> <font size="2">'; for ($i=0;$i<3;$i++) { echo endIp($ip[$i],$mask[$i]); echo "."; } $ip_4 = endIp($ip[3],$mask[3]); echo --$ip_4; echo ' </font> </td> </tr> <tr> <td align="right"><font size="2">廣播地址:</font></td> <td> <font size="2">'; for ($i=0;$i<4;$i++) { echo endIp($ip[$i],$mask[$i]); if($i!=3) echo "."; } ?>
希望本文所述對大家的php程序設(shè)計有所幫助。
相關(guān)文章
寫php分頁時出現(xiàn)的Fatal error的解決方法
因為你一個文件加載了兩次以上,導(dǎo)致函數(shù)定義重復(fù)。你用xxx_once 就必免文件多次加載。2011-04-04PHP cookie,session的使用與用戶自動登錄功能實現(xiàn)方法分析
這篇文章主要介紹了PHP cookie,session的使用與用戶自動登錄功能實現(xiàn)方法,結(jié)合實例形式分析了php使用cookie與session進(jìn)行數(shù)據(jù)存取以及實現(xiàn)自動登陸功能的相關(guān)操作技巧,需要的朋友可以參考下2019-06-06php selectradio和checkbox默認(rèn)選擇的實現(xiàn)方法詳解
本篇文章是對php selectradio和checkbox默認(rèn)選擇的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP將DateTime對象轉(zhuǎn)化為友好時間顯示的實現(xiàn)代碼
PHP將DateTime對象轉(zhuǎn)化為友好時間顯示的實現(xiàn)代碼,需要的朋友可以參考下。2011-09-09