1、前言
ip轉換成整型儲存是資料庫優化一大趨勢,字串索引比整型索引消耗資源很多,特別是表中資料量大的時候,以及求查詢某乙個ip段的資料。本文所指的ip是ip4,ip6暫不再討論範圍
2、ip4轉化為整形
這裡將介紹:
2.1、ip2long
判斷乙個 ip4 位址是不是合法的 ip,符合則返回乙個長整型,不符合返回 false
以下是測試:
然而當 ip4 值較大時,ip2long轉化會出現負數的情況
2.2、php原生模擬ip2long的過程
php自帶的ip2long雖然好用,由於返回值是int,所以會造成資料溢位,比如有些ip位址轉換後變成負數,為了好看,還是需要自己模擬乙個ip2long的過程,不多說,先上**
function iptoint($ip)以下是測試:$hex = dechex($value);//
將十進位制轉為十六進製制
//每個ip段的值最大為255,十六進製制為ff,故最長是兩位,
//例ip = 1.1.1.1 如果不補0,則十六進製制為 1111,十進位制為 4369
//補0為 十六進製制為 01010101,十進位制為 16843009
if(strlen($hex) < 2
) $newhex .=$hex; }$
int = hexdec($newhex);//
十六進製制轉為十進位制
return $int
;}
3、將整形轉化為ip
這裡將介紹:
3.1、long2ip
long2ip 只會返回0.0.0.0 到255.255.255.255的內容,
傳人空值預設返回0.0.0.0,超出最大值返回255.255.255.255
以下為測試:
long2ip可以識別由ip2long轉化產生的負數(可喜可賀);所有在使用過程中,ip2long和long2ip一起使用就不會有什麼問題,當然也要介紹一下如何用原生的模擬long2ip的過程
3.2、php原生模擬long2ip的過程
php自帶的long2ip已經可以解決大部分問題,這裡也只是簡單介紹一下原生的模擬方法,不多說,先上**
function inttoip($int以下為測試:)
for($i = 0; $i < 8; $i += 2
) $aip = hexdec($hex); //
將每段十六進製制數轉換我為十進位制,即每個ip段的值
}
return implode('.'
,$aip);
}
4.1、ip2long
判斷乙個 ip4 位址是不是合法的 ip,符合則返回乙個長整型,不符合返回 false
詳情參考:
4.2、dechex
十進位制轉化為十六進製制(不用自己寫方法,爽)
詳情參考:
4.3、hexdec
十六進製制轉十進位制
詳情參考:
4.4、long2ip
將長整型轉化為 ip4 格式的字串,用於判斷乙個ip是否合法
詳情參考:
整數與IP位址的轉換
原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合起來即為 00001010 0000000...
Python獲取IP的方式與意義
使用 http x forwarded for 獲取到的ip位址,有以下幾種情況。沒有使用 伺服器 remote addr 您的 ip http via 沒數值或不顯示 http x forwarded for 無數值或不顯示 使用透明 伺服器 transparent proxies remote ...
整數與ip位址間的轉換
原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合...