【PHP】IPv4与整数转换、IPv6与整数转换
生活随笔
收集整理的這篇文章主要介紹了
【PHP】IPv4与整数转换、IPv6与整数转换
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
inet_pton:將可讀的IP地址轉(zhuǎn)換為其壓縮的in_addr表示形式
inet_ntop:將打包的Internet地址轉(zhuǎn)換為可讀的表示形式
inet_ntop(inet_pton($ip));
IPv4 與整數(shù)互轉(zhuǎn)
/*** 代替 long2ip 函數(shù)* @param $ip* @return string * */ function convertIpToString($ip) { $long = 4294967295 - ($ip - 1);return long2ip(-$long); }/*** 代替 ip2long 函數(shù)* @param $ip* @return string * */ function convertIpToLong($ip) {return sprintf("%u", ip2long($ip)); }$ip_long = $this->convertIpToLong('192.168.8.30'); $long_ip = $this->convertIpToString($ip_long); echo $ip_long; // 3232237598 echo $long_ip; // 192.168.8.30IPv6 與整數(shù)互轉(zhuǎn)
/*** IPV6 地址轉(zhuǎn)換為整數(shù)* @param $ipv6* @return string * */function ip2long6($ipv6) {$ip_n = inet_pton($ipv6);$bits = 15; // 16 x 8 bit = 128bit$ipv6long = '';while ($bits >= 0) {$bin = sprintf("%08b", (ord($ip_n[$bits])));$ipv6long = $bin . $ipv6long;$bits--;}return gmp_strval(gmp_init($ipv6long, 2), 10); } /*** 數(shù)字轉(zhuǎn)為IPv6地址* 數(shù)字長度38位*/ function long2ip_v6($dec) {if (function_exists('gmp_init')) {$bin = gmp_strval(gmp_init($dec, 10), 2); //10進(jìn)制 -> 2進(jìn)制} elseif (function_exists('bcadd')) {$bin = '';do {$bin = bcmod($dec, '2') . $bin; //10進(jìn)制 -> 2進(jìn)制,獲取$dec/2的余數(shù)$dec = bcdiv($dec, '2', 0); // dec/2的值,0表示小數(shù)點(diǎn)后位數(shù)} while (bccomp($dec, '0'));} else {// trigger_error('GMP or BCMATH extension not installed!', E_USER_ERROR);return 'GMP or BCMATH extension not installed!';}$bin = str_pad($bin, 128, '0', STR_PAD_LEFT); // 給2進(jìn)制值補(bǔ)0$ip = array();for ($bit = 0; $bit <= 7; $bit++) {$bin_part = substr($bin, $bit * 16, 16); // 每16位分隔$ip[] = dechex(bindec($bin_part)); // 2進(jìn)制->10進(jìn)制->16進(jìn)制}$ip = implode(':', $ip);// inet_pton:將可讀的IP地址轉(zhuǎn)換為其壓縮的in_addr表示形式// inet_ntop:將打包的Internet地址轉(zhuǎn)換為可讀的表示形式return inet_ntop(inet_pton($ip)); }// 測試 $ip6_long = $this->ip2long6('2001:4860:a005::68'); $long_ip6 = $this->long2ip6($ip6_long); echo $ip6_long; // 42541956150894553250710573749450571880 echo $long_ip6; // 2001:4860:a005::68參考鏈接
https://www.w3xue.com/exp/article/201811/6927.html
總結(jié)
以上是生活随笔為你收集整理的【PHP】IPv4与整数转换、IPv6与整数转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Laravel】连接sqlite,Da
- 下一篇: 动态规划算法php,php算法学习之动态