在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("%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))); } ?>
|
http://www.bkjia.com/PHPjc/632086.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632086.htmlTechArticle在32位系統,ip2long不能轉換IPv6,但您可以轉換ip2bin和bin2ip這個函數轉換為IPv4和IPv6,返回false,如果是無效的 執行個體程式 代碼如下 複製代碼...