PHP中IP位址處理

2021-08-11 14:11:31 字數 1855 閱讀 7612

近期對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...