php long2ip,php 中IPV6 ip2long的问题解决办法
在32位系统,ip2long不能转换IPv6,但您可以转换ip2bin和bin2ip 这个函数转换为IPv4和IPv6,返回false,如果是无效的
实例程序
| 代码如下 | 复制代码 |
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))); } ?> | |
总结
以上是生活随笔为你收集整理的php long2ip,php 中IPV6 ip2long的问题解决办法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: php 信号量 关闭,php 信号量
- 下一篇: 用php打印九九乘法表,php如何打印出