加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 中IPV6 ip2long的问题解决措施

发布时间:2022-07-27 12:01:27 所属栏目:PHP教程 来源:互联网
导读:在32位系统,ip2long不能转换IPv6,但您可以转换ip2bin和bin2ip,这个函数转换为IPv4和IPv6,返回false,如果是无效的,实例程序: ?php function ip2bin($ip) { if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) return base_convert(ip2long
  在32位系统,ip2long不能转换IPv6,但您可以转换ip2bin和bin2ip,这个函数转换为IPv4和IPv6,返回false,如果是无效的,实例程序:
 
  <?php  
  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("%08b",(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)));  
  }  
  ?> 

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读