php ipv6 形式変換方法: 最初に PHP サンプル ファイルを作成し、次に "$ipv6" を定義し、最後に "gmp_strval(gmp_init($ipv6long,2),10);" を使用して 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 サイトの他の関連記事を参照してください。