在web開發領域中,我們經常需要將整形數字轉換成ip位址,例如在使用者註冊時記錄使用者的註冊ip,或是在分析web存取日誌時需要將ip位址轉換成整數進行查詢等等。針對這種需求,PHP提供了便捷的ip2long()和long2ip()函數。
ip2long()函數將一個IPv4位址轉換成長整數數字(32位元有符號整數),而long2ip()函數則將一個長整數數字轉換成IPv4位址。
$ip = '192.168.0.1';
$long = ip2long($ip);
echo $long.PHP_EOL; // 輸出:-1062731775
$long = -1062731775;
$ip = long2ip($long);
echo $ip.PHP_EOL; // 輸出:192.168.0.1
?>
############################################### #但是要注意的是,這兩個函數只支援IPv4位址,如果需要處理IPv6位址,需要使用其他的方式來實作。另外,PHP在處理ip位址和整型數位轉換時,採用的是網路位元組序(big-endian)。 ######網路位元組序是指在TCP/IP協定堆疊中規定的位元組順序,位元組按照大端(big-endian)方式排列。所謂大端,即高位元組在前,低位元組在後。例如一個整數0x12345678,在網路位元組序中就被表示成0x12,0x34,0x56,0x78。 ######如何將ip位址轉換成整數? ######將一個ip位址轉換成整數,可以用以下的方式:######
$ipArr = explode(".", $ip); // 将IP地址拆分成数组
$num = 0;
foreach ($ipArr as $k => $v) {
$num = $num << 8; // 左移8位
$num += intval($v); // 叠加
}
return $num;
登入後複製
###}## #?>######此函數將ip位址拆成數組,然後對於每個數字都移位後疊加,最後轉換成整數。 ######如何將整數轉換成ip位址? ######將一個整數轉換成ip位址,可以用以下的方式:######$arr = array(
($long & 0xff000000) >> 24,
($long & 0x00ff0000) >> 16,
($long & 0x0000ff00) >> 8,
($long & 0x000000ff)
);
return implode('.', $arr);###}## #?>######此函數將整數位運算後將其轉成數組,再將數組連接成ip位址。 ######總結######PHP提供了便捷的ip2long()和long2ip()函數,可以將ip位址和整數之間互相轉換。但要注意的是,這兩個函數只支援IPv4位址,並且採用的是網路位元組序。如果需要處理IPv6位址,需要使用其他的方式來實現。 ###