在進(jìn)行web開(kāi)發(fā)時(shí),IP地址的應(yīng)用非常頻繁。而php 是一種非常實(shí)用的web開(kāi)發(fā)語(yǔ)言,因此對(duì)php IP計(jì)算的了解顯得尤為重要。本文將詳細(xì)介紹php IP計(jì)算相關(guān)的知識(shí)點(diǎn),并舉例說(shuō)明各種計(jì)算方法的使用場(chǎng)景。
計(jì)算IP地址范圍,是網(wǎng)絡(luò)管理員必備的基礎(chǔ)技能之一。下面我們來(lái)看看在php中如何來(lái)計(jì)算IP的范圍。
function getIpRange($ip, $mask) { $ip =ip2long($ip); //把ip轉(zhuǎn)化成長(zhǎng)整形 $mask = ~((1<< (32 - $mask)) - 1); return array( long2ip($ip & $mask), // 獲取網(wǎng)絡(luò)號(hào) long2ip($ip | (~$mask)) // 獲取廣播號(hào) ); } $ip = "192.168.168.1"; $mask = "24"; $range = getIpRange($ip, $mask); echo $range[0]."~".$range[1];前面定義了一個(gè)函數(shù)getIpRange(),函數(shù)接收兩個(gè)參數(shù),一個(gè)是IP,一個(gè)是掩碼。函數(shù)中首先把IP和掩碼都轉(zhuǎn)成了二進(jìn)制,并將掩碼取反。然后獲取了網(wǎng)絡(luò)號(hào)和廣播號(hào),并分別使用long2ip()把網(wǎng)絡(luò)號(hào)和廣播號(hào)轉(zhuǎn)化成人類可讀的格式。接下來(lái)運(yùn)行代碼,得到的結(jié)果就是192.168.168.0~192.168.168.255。這就是該IP地址的局域網(wǎng)IP地址段了。
除了計(jì)算IP范圍,我們還需要了解如何判斷IP地址是否在某一個(gè)范圍內(nèi)。下面來(lái)看看怎么在php中實(shí)現(xiàn)。
function checkIpInRange($ip, $start_ip, $end_ip) { $flag = false; $start_ip_num = ip2long($start_ip); $end_ip_num = ip2long($end_ip); $ip_num = ip2long($ip); if (($ip_num >= $start_ip_num)&&($ip_num<= $end_ip_num)) { $flag = true; } return $flag; } $start_ip = "192.168.1.100"; $end_ip = "192.168.1.200"; $ip = "192.168.1.120"; echo checkIpInRange($ip, $start_ip, $end_ip)?"屬于該IP地址段":"不屬于該IP地址段";定義了一個(gè)函數(shù)checkIpInRange(),函數(shù)接收三個(gè)參數(shù),一個(gè)是待判斷的IP地址,一個(gè)是起始IP地址,一個(gè)是結(jié)束IP地址。首先使用ip2long()將所有IP地址轉(zhuǎn)化為長(zhǎng)整型,然后比較,如果該地址在范圍內(nèi),則返回true,不在范圍內(nèi)則返回false。運(yùn)行代碼后,能夠得出判斷結(jié)果。如果IP地址在該范圍內(nèi),則結(jié)果為“屬于該IP地址段”,否則為“不屬于該IP地址段”。
總結(jié):
本文以詳細(xì)的步驟講解了php中IP地址的計(jì)算方法,介紹了計(jì)算IP范圍、判斷IP是否在范圍內(nèi)等技能點(diǎn),并且給出了相應(yīng)的php代碼示例。希望對(duì)于php開(kāi)發(fā)者們有所幫助。