php ip を数値に変換する方法: 1. PHP 関数の ip2long 関数と sprintf 関数を使用して変換します; 2. 「gmp_strval(gmp_init($ipv6long,2),10);」メソッドで変換します。
推奨: 「PHP ビデオ チュートリアル 」
PHP で ip を数値に変換する (ipv4/ipv6)
要件: ipv4 または ivp6 の IP アドレスを数値に変換し、データベースに保存します。
1. ipv4 を数値 (正の整数) に変換します:
ipv4 は、直接使用 PHP に付属の関数 ip2long() は、変換のために sprintf() 関数と結合されます。コードは次のとおりです:
$ip = '202.203.44.225'; $ipToInt = sprintf('%u',ip2long($ip)); // 结果为:3402312929 echo "ip '202.203.44.225' to int is: ".$ipToInt;
結果は次のとおりです:
#ip2long()関数 ipを長整数に変換する関数ですが、一部のipはip:のように長整数に変換すると複素数になるため、sprintf()関数を使用する必要があります。配列を正の整数に変換します。複素数を正の整数に変換する方法は他にもありますが、sprintf()が一番便利だと思うので、ここではsprintf()を使うことをお勧めします。さらに、負の数値を変換するために abs() 関数を使用しないように皆さんに注意してください。変換結果には次のような違いがあるからです。
$ip = '192.168.101.100'; $ip2int = ip2long($ip); echo abs($ip2int).'<br/>'; // 结果为:1062705820 echo sprintf('%u',$ip2int); // 结果为:32322614762. ipv6 を数値 (正の整数) に変換します。 ipv6 形式の IP アドレスの場合、ip2long() 関数を使用して直接変換することはできません。他の方法でのみ変換できます。以下は、PHP マニュアル (http:/) に netizen Weissner によって投稿されます。 /php.net/manual/zh/function .ip2long.php#94477) ソリューションを残します。その前に、extension=php_gmp.dll の前のコメント記号 ';' を削除する必要があるという事実に全員が注意する必要があります。 php.ini ファイルはコード内で使用されるため、拡張子の関数を変更します。 。 ipv6 を数値に変換するコードは次のとおりです:
$ipv6 = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'; $ip_n = inet_pton($ipv6); $bits = 15; // 16 x 8 bit = 128bit $ipv6long=''; while ($bits >= 0) { $bin = sprintf("%08b",(ord($ip_n[$bits]))); $ipv6long = $bin.$ipv6long; $bits--; } echo gmp_strval(gmp_init($ipv6long,2),10); // 结果为:338770000845734292534325025077361652240ご覧のとおり、ipv6 アドレスが数値に変換された後は 38 個の数値があり、データベース内の bigint は使用できません。保存されるため、データベースのフィールドの型を char または varchar 型に変換する必要もあります。 IP が ivp4 か ipv6 かを判断し、IP をデジタル形式に変換するコードが添付されています:
$ip = '192.168.101.100'; //$ip = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'; if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { echo sprintf('%u',ip2long($ip));exit; } else if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $ip_n = inet_pton($ip); $bits = 15; // 16 x 8 bit = 128bit $ipv6long=''; while ($bits >= 0) { $bin = sprintf("%08b",(ord($ip_n[$bits]))); $ipv6long = $bin.$ipv6long; $bits--; } echo gmp_strval(gmp_init($ipv6long,2),10);exit; }
以上がPHPのIPアドレスを数値に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。