ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルの IPV6 ip2long の問題の解決策

php_PHP チュートリアルの IPV6 ip2long の問題の解決策

WBOY
WBOYオリジナル
2016-07-13 10:57:331377ブラウズ

32 ビット システムでは、ip2long は IPv6 を変換できませんが、ip2bin と bin2ip は変換できます この関数はIPv4とIPv6に変換し、無効な場合はfalseを返します

サンプルプログラム

www.bkjia.com
コードは次のとおりです コードをコピー

関数 ip2bin($ip)
{
If(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false)
returnbase_convert(ip2long($ip),10,2); If(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false)
false を返します
If(($ip_n = inet_pton($ip)) === false) false を返します
$bits = 15 // 16 x 8 ビット = 128 ビット (IPv6)
一方 ($bits >= 0)
{
$bin = sprintf("%08b",(ord($ip_n[$bits])))
$ipbin = $bin.$ipbin
; $bits--; }
$ipbin を返します。 }


関数 bin2ip($bin)

{

If(strlen($bin) return long2ip(base_convert($bin,2,10)); If(strlen($bin) != 128)
false を返します
$pad = 128 - strlen($bin); for ($i = 1; $i {
$bin = "0".$bin; }
$ビット = 0; while ($bits {
$bin_part = substr($bin,($bits*16),16); $ipv6 .= dechex(bindec($bin_part)).":"
$bits++; }
戻り inet_ntop(inet_pton(substr($ipv6,0,-1))); }
?>









http://www.bkjia.com/PHPjc/632086.html
tru​​ehttp://www.bkjia.com/PHPjc/632086.html

技術記事

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。