ホームページ  >  記事  >  バックエンド開発  >  PHPのIPアドレスを数値に変換する方法

PHPのIPアドレスを数値に変換する方法

藏色散人
藏色散人オリジナル
2020-11-01 13:58:083134ブラウズ

php ip を数値に変換する方法: 1. PHP 関数の ip2long 関数と sprintf 関数を使用して変換します; 2. 「gmp_strval(gmp_init($ipv6long,2),10);」メソッドで変換します。

PHPのIPアドレスを数値に変換する方法

推奨: 「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;

結果は次のとおりです:

PHPのIPアドレスを数値に変換する方法

#ip2long()関数 ipを長整数に変換する関数ですが、一部のipはip:のように長整数に変換すると複素数になるため、sprintf()関数を使用する必要があります。配列を正の整数に変換します。複素数を正の整数に変換する方法は他にもありますが、sprintf()が一番便利だと思うので、ここではsprintf()を使うことをお勧めします。さらに、負の数値を変換するために abs() 関数を使用しないように皆さんに注意してください。変換結果には次のような違いがあるからです。

$ip = '192.168.101.100';
$ip2int = ip2long($ip); 
echo abs($ip2int).&#39;<br/>&#39;; // 结果为:1062705820
echo sprintf(&#39;%u&#39;,$ip2int); // 结果为:3232261476

2. ipv6 を数値 (正の整数) に変換します。

ipv6 形式の IP アドレスの場合、ip2long() 関数を使用して直接変換することはできません。他の方法でのみ変換できます。以下は、PHP マニュアル (http:/) に netizen Weissner によって投稿されます。 /php.net/manual/zh/function .ip2long.php#94477) ソリューションを残します。その前に、extension=php_gmp.dll の前のコメント記号 ';' を削除する必要があるという事実に全員が注意する必要があります。 php.ini ファイルはコード内で使用されるため、拡張子の関数を変更します。 。

ipv6 を数値に変換するコードは次のとおりです:

$ipv6 = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
$ip_n = inet_pton($ipv6);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
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 = &#39;192.168.101.100&#39;;
//$ip = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    echo sprintf(&#39;%u&#39;,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=&#39;&#39;;
    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 サイトの他の関連記事を参照してください。

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