php求一個(gè)網(wǎng)段開始與結(jié)束IP地址的方法
本文實(shí)例講述了php求一個(gè)網(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個(gè)1,后面有8個(gè)0.
開始IP地址的算法是:192.168.1.5的二進(jìn)制與子網(wǎng)掩碼的二進(jìn)制進(jìn)行“與”運(yùn)算出來的。
結(jié)束IP地址的算法是:子網(wǎng)掩碼的二進(jìn)制先取反,然后和192.168.1.5的二進(jìn)制進(jìn)行“或”運(yùn)算
實(shí)際的就應(yīng)用中,那樣得出的是網(wǎng)絡(luò)地址和廣播地址,網(wǎng)絡(luò)地址+1才是第一個(gè)主機(jī)地址,廣播地址-1為最后一個(gè)主機(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">第一個(gè)可用:</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 "."; } ?>
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
- php產(chǎn)生隨機(jī)數(shù)的兩種方法實(shí)例代碼 輸出隨機(jī)IP
- php進(jìn)行ip地址掩碼運(yùn)算處理的方法
- PHP獲取用戶訪問IP地址的5種方法
- PHP實(shí)現(xiàn)的限制IP投票程序IP來源分析
- 基于PHP實(shí)現(xiàn)通過照片獲取ip地址
- php獲取本機(jī)真實(shí)IP地址實(shí)例代碼
- PHP 獲取ip地址代碼匯總
- php獲取訪問者IP地址匯總
- php限制ip地址范圍的方法
- php隱藏IP地址后兩位顯示為星號(hào)的方法
- php中獲取主機(jī)名、協(xié)議及IP地址的方法
- PHP實(shí)現(xiàn)的隨機(jī)IP函數(shù)【國內(nèi)IP段】
相關(guān)文章
PHP文件操作之獲取目錄下文件與計(jì)算相對(duì)路徑的方法
這篇文章主要介紹了PHP文件操作技巧之獲取目錄下文件與計(jì)算相對(duì)路徑的方法,其中獲取目錄下文件方面分為包含子目錄和不包含子目錄兩種情況,需要的朋友可以參考下2016-01-01寫php分頁時(shí)出現(xiàn)的Fatal error的解決方法
因?yàn)槟阋粋€(gè)文件加載了兩次以上,導(dǎo)致函數(shù)定義重復(fù)。你用xxx_once 就必免文件多次加載。2011-04-04PHP cookie,session的使用與用戶自動(dòng)登錄功能實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP cookie,session的使用與用戶自動(dòng)登錄功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了php使用cookie與session進(jìn)行數(shù)據(jù)存取以及實(shí)現(xiàn)自動(dòng)登陸功能的相關(guān)操作技巧,需要的朋友可以參考下2019-06-06php selectradio和checkbox默認(rèn)選擇的實(shí)現(xiàn)方法詳解
本篇文章是對(duì)php selectradio和checkbox默認(rèn)選擇的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP將DateTime對(duì)象轉(zhuǎn)化為友好時(shí)間顯示的實(shí)現(xiàn)代碼
PHP將DateTime對(duì)象轉(zhuǎn)化為友好時(shí)間顯示的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-09-09