php求一個網段開始與結束IP地址的方法_php技巧

來源:互聯網
上載者:User

本文執行個體講述了php求一個網段開始與結束IP地址的方法。分享給大家供大家參考。具體如下:

比如:網段(192168.1.5/24),其子網路遮罩根據24劃分為:
11111111.11111111.11111111.00000000(255.255.255.0)
說明:IP地址為32bits,24在劃分網段中就表示前面有24個1,後面有8個0.
開始IP地址的演算法是:192.168.1.5的二進位與子網路遮罩的二進位進行“與”運算出來的。
結束IP地址的演算法是:子網路遮罩的二進位先取反,然後和192.168.1.5的二進位進行“或”運算
實際的就應用中,那樣得出的是網路地址和廣播位址,網路地址+1才是第一個主機地址,廣播位址-1為最後一個主機地址。

<?phpfunction 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');//設定IP地址,可以從表單擷取,這裡只作示範$mask = '24';          //設定掩碼$bSub = mask2bin($mask);     //將子網路遮罩轉換二進位$mask = array();$mask[] = substr($bSub,"0",8);  //將子網路遮罩每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">網路地址:</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程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.