ホームページ >バックエンド開発 >PHPの問題 >PHP IPv6形式を変換する方法

PHP IPv6形式を変換する方法

藏色散人
藏色散人オリジナル
2021-07-19 09:45:462990ブラウズ

php ipv6 形式変換方法: 最初に PHP サンプル ファイルを作成し、次に "$ipv6" を定義し、最後に "gmp_strval(gmp_init($ipv6long,2),10);" を使用して ipv6 を数値に変換します。それ。

PHP IPv6形式を変換する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 パソコン

php ipv6 の変換方法フォーマット?

PHP で ip を数値 (ipv6) に変換します。

ivp6 の IP アドレスを数値に変換し、データベースに保存します。

ipv6 を数値に変換します (正の値) integer):

ipv6 形式の IP アドレスの場合、ip2long() 関数を使用して直接変換することはできません。他の方法でのみ変換できます。以下は netizen Weissner によって投稿されますPHP マニュアル (http://php.net/manual/zh/function.ip2long.php#94477) に解決策が記載されていますが、その前に、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 ビデオ」チュートリアル

以上がPHP IPv6形式を変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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