近期對php基礎知識做了乙個梳理,將常用的幾點總結記錄下,當做自己對php的乙個系統性的複習吧。開發中總會與ip位址打交道,就會常用兩個函式.php提供了ip2long與long2ip方法對ip位址處理。
ip2long將乙個ipv4的字串網際網路協議轉換成數字格式
int ip2long ( string
$ip_address )
//引數: ip_address 乙個標準格式的位址。
//返回值: 返回ip位址轉換後的數字 或 false
long2ip將數字格式轉換成乙個ipv4的字串網際網路協議
string long2ip ( string
$proper_address )
//引數: proper_address 長整型的正確位址表示。
//返回值: 返回網際網路位址作為字串。
向資料庫儲存ip位址時可以使用ip2long函式將ip位址從字串轉換成long型能節省儲存空間,取出時再用long2ip 還原ip位址。轉換後,對ip位址是否在區間的判斷也更加方便 如下:
$a=ip2long('127.0.0.66');
$b=ip2long('127.0.0.111');
$c=ip2long('127.0.0.10');
if($c>=$a && $c
<=$b)else
但是需要注意的是!!!注意 注意 注意
php中將ip轉換成整型的函式ip2long()容易出現問題,在ip比較大的情況下,會變成負數。
為啥吶? 答案在此!
ipv4使用無符號32位位址,因此最多有2的32次方減1(4294967295)個位址。書寫用4個小數點分開的10進製數。如下記為a.b.c.d,例如:192.168.100.100。
ipv4位址每個10進製數都是無符號的位元組,範圍在0~255,將ipv4位址轉為無符號數,其實就是將每個10進製數放在對應的8位上,組成乙個4位元組的無符號整型。192.168.100.100,192,168在高8位100,100在低8位。
<?php
$ip = "192.168.1.2";
$ip_n = ip2long($ip);
echo
$ip_n; //輸出的是個負數 -1062731518
?>
由於ip轉換成的整型值太大超出了整型的範圍,所以變成負數。
需寫成$ip_n = bindec(decbin(ip2long($ip)));
這樣便可得到無符號的整型數,如下
<?php
$ip = "192.168.1.2";
$ip_n = bindec(decbin(ip2long($ip)));
echo
$ip_n; //得到 3232235778
?>
還有個解決方法:
輸出時用%u來格式化為無符號整型。
<?php
$ip = '192.168.101.100';
$ip_long = sprintf('%u',ip2long($ip));
echo
$ip_long.php_eol; // 3232261476
echo long2ip($ip_long); // 192.168.101.100
?>
IPy Python中ip位址處理模組
在ip位址規劃中,涉及到計算大量的ip位址,包括網段 網路掩碼 廣播位址 子網數 ip型別等。別擔心,ipy模組拯救你。ipy模組可以很好的輔助我們高效的完成ip的規劃工作。pip install ipy 目前 conda 好像不支援 1.ipy模組包含ip類,使用它可以方便處理絕大部分格式為ipv...
PHP 獲取 ip 位址
remote addr 是你的客戶端跟你的伺服器 握手 時候的ip。如果使用了 匿名 remote addr將顯示 伺服器的ip。http client ip 是 伺服器傳送的http頭。如果是 超級匿名 則返回none值。同樣,remote addr也會被替換為這個 伺服器的ip。server r...
IP位址處理模組IPy
安裝 pip install ipy from ipy import ip 1 ip型別 ip ip 192.168.0.0 16 返回4 2 ip位址的子網個數 print ip.len 3 反向解析位址格式 ip ip 192.168.0.0 16 print ip.reversenames 4...