php 中IPV6 ip2long的问题解决办法

在32位系统,ip2long不能转换IPv6,但您可以转换ip2bin和bin2ip,这个函数转换为IPv4和IPv6,返回false,如果是无效的,实例程序:

  1. <?php  
  2. function ip2bin($ip)  
  3. {  
  4.     if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false)  
  5.         return base_convert(ip2long($ip),10,2);  
  6.     if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false)  
  7.         return false;  
  8.     if(($ip_n = inet_pton($ip)) === false) return false;  
  9.     $bits = 15; // 16 x 8 bit = 128bit (ipv6)  
  10.     while ($bits >= 0)  
  11.     {  
  12.         $bin = sprintf("%08b",(ord($ip_n[$bits])));  
  13.         $ipbin = $bin.$ipbin;  
  14.         $bits–;  
  15.     }  
  16.     return $ipbin;  
  17.  
  18. function bin2ip($bin)  
  19. {  
  20.    if(strlen($bin) <= 32) // 32bits (ipv4)  
  21.        return long2ip(base_convert($bin,2,10));  
  22.    if(strlen($bin) != 128)  
  23.        return false;  
  24.    $pad = 128 – strlen($bin);  
  25.    for ($i = 1; $i <= $pad$i++)  
  26.    {  
  27.        $bin = "0".$bin;  
  28.    }  
  29.    $bits = 0;  
  30.    while ($bits <= 7)  
  31.    {  
  32.        $bin_part = substr($bin,($bits*16),16);  
  33.        $ipv6 .= dechex(bindec($bin_part)).":";  
  34.        $bits++;  
  35.    }  
  36.    return inet_ntop(inet_pton(substr($ipv6,0,-1)));  
  37. }  
  38. ?> 
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » php 中IPV6 ip2long的问题解决办法

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡