在網站的優化中如果將IP地址轉成整形來存儲的話,可以大大的降低數據庫的索引時間,而且還節省了很多的服務器資源。在php中,可以借助內置的預設函數 ip2long() 和 long2ip() 來實現IP地地數據類型的轉換,但需要要注意的是  ip2long() 和 long2ip() 只能實現IPV4地址的處理!

php ip2long() 函數詳解

国产视频appip2long:將 IPV4 地址轉換成長整型數字!

語法:

ip2long($ip_address)

參數:$ip_address 為 IPV4 地址

示例:

<?php
$ip = '127.168.0.125';
//echo ip2long($ip);
// 2141716605
$ip2 = '192.0.34.166';
echo ip2long($ip2);
//3221234342 (64位系統下輸出)
//-1073732954 (32位系統下會輸出負數)
?>

php long2ip() 函數詳解

国产视频applong2ip:將長整型數字轉化為標準的IPV4地址!

語法:

long2ip($proper_address)

国产视频app參數:$proper_address 要轉換的長整型數字

示例:

<?php
$ip = '127.168.0.125';
$ipstr = ip2long($ip);
echo long2ip($ipstr);
// 127.168.0.125
$ip2 = '192.0.34.166';
$ipstr2 = ip2long($ip2);
echo long2ip($ipstr2);
// 192.0.34.166
?>

ip2long() 轉換后的負數問題

国产视频app當ip地址比較大時,轉換后的整數會有超過最大整形范圍(也就是溢出)的情況。而超過的部份就會成為負數,為避免此情況的出現我們需要對 ip2long(0 的結果進行處理一下!

處理方法1:

示例代碼:

<?php
$ip = "192.0.34.166";
$strip = bindec(decbin(ip2long($ip))); //這里通過二進制進行處理一下
echo $strip;
// 將整數類型轉成IPV4
echo long2ip($strip);
?>

注:decbin函數將十進制轉換為二進制,bindec函數將二進制轉換為整形。

處理方法2:

国产视频app使用類C的sprintf方法來避免 ip2long 出現負數的問題

示例代碼:

<?php
echo sprintf("%u\n", ip2long("157.23.56.90"));
// 2635544666
?>