php long2ip,php 中IPV6 ip2long的问题解决办法
在32位系統(tǒng),ip2long不能轉(zhuǎn)換IPv6,但您可以轉(zhuǎn)換ip2bin和bin2ip 這個函數(shù)轉(zhuǎn)換為IPv4和IPv6,返回false,如果是無效的
實例程序
| ?代碼如下 | 復(fù)制代碼 |
function ip2bin($ip) { if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) return base_convert(ip2long($ip),10,2); if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) return false; if(($ip_n = inet_pton($ip)) === false) return false; $bits = 15; // 16 x 8 bit = 128bit (ipv6) while ($bits >= 0) { $bin = sprintf("b",(ord($ip_n[$bits]))); $ipbin = $bin.$ipbin; $bits--; } return $ipbin; } function bin2ip($bin) { if(strlen($bin) <= 32) // 32bits (ipv4) return long2ip(base_convert($bin,2,10)); if(strlen($bin) != 128) return false; $pad = 128 - strlen($bin); for ($i = 1; $i <= $pad; $i ) { $bin = "0".$bin; } $bits = 0; while ($bits <= 7) { $bin_part = substr($bin,($bits*16),16); $ipv6 .= dechex(bindec($bin_part)).":"; $bits ; } return inet_ntop(inet_pton(substr($ipv6,0,-1))); } ?> | |
總結(jié)
以上是生活随笔為你收集整理的php long2ip,php 中IPV6 ip2long的问题解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 信号量 关闭,php 信号量
- 下一篇: java jar包 平滑重启,nginx