ホームページ >バックエンド開発 >PHPチュートリアル >PHP で IPv4 と IPv6 を処理するにはどうすればよいですか?

PHP で IPv4 と IPv6 を処理するにはどうすればよいですか?

王林
王林オリジナル
2023-05-24 08:25:352166ブラウズ

PHP は人気のある Web 開発言語です。型指定されていない言語であり、IP アドレスなどのさまざまなデータ型を処理するために使用できます。インターネット上では、このデジタル時代において IP アドレスは非常に重要な位置を占めています。ただし、PHP には、他のプログラミング言語のように IP アドレスを処理するための組み込みライブラリが提供されていません。

この記事では、PHP で IPv4 アドレスと IPv6 アドレスを処理する方法について説明します。

IPv4 と IPv6 とは何ですか?

IPv4 は、現在最も広く使用されている IP アドレス プロトコルです。これは 32 ビットのアドレスで、合計 42 億のアドレスを収容できます。しかし、インターネットの急速な発展により、IPv4 は現在のニーズを満たすことができなくなりました。 IPv4 アドレスでは不十分であるため、IPv6 アドレスが表示されます。 IPv6 アドレスは、2 の 128 乗のアドレスを収容できる 128 ビットのアドレスで、これは今後数十年間の需要を満たすのに十分な数です。

PHP で IPv4 を扱うにはどうすればよいですか?

IPv4 アドレスの場合、PHP は、IPv4 アドレスを 32 ビット整数に変換できる組み込み関数 ip2long() を提供します。この関数は、IPv4 アドレス文字列をパラメータとして受け取り、アドレスを表す整数値を返します。
例:

$ip_address = '192.168.1.1';
$ip_long = ip2long($ip_address);
echo $ip_long;

出力は次のようになります:

-1062731775

ご覧のとおり、IP アドレスを整数に変換すると、その値は負の数になります。 PHP では、符号付き整数型は 31 ビットのみであるため、符号なし整数または long2ip() 関数を使用して整数を IP アドレス文字列に復元する必要があります。例:

$ip_address = '192.168.1.1';
$ip_long = ip2long($ip_address);
$ip_new = long2ip($ip_long);
echo $ip_new;

出力は次のようになります:

192.168.1.1

How to handle IPv6 in PHP?

PHP は、IPv6 アドレスを処理するための ip2long() のような関数を提供しません。ただし、他の方法を使用して IPv6 アドレスを処理することもできます。たとえば、IPv6 アドレスは、ネットワーク バイト オーダーを使用してバイト配列に変換できます。ネットワーク バイト オーダーは、多くの異なる CPU アーキテクチャ間でのデータの正しい転送を保証する標準的なバイト オーダーです。

$ip_address = "2001:db8:85a3:0:0:8a2e:370:7334";
$ip_bin = inet_pton($ip_address);
$ip_hex = bin2hex($ip_bin);
echo $ip_hex;

出力は次のようになります:

20010db885a30000008a2e03707334

または、PHP の GMP 拡張機能を使用して、IPv6 アドレスをより便利に処理します。 GMP 拡張機能は、非常に大きな数値を処理するために PHP によって提供される数学的計算ライブラリです。

$ip_address = '2001:db8:85a3:0:0:8a2e:370:7334';
$bin = inet_pton($ip_address);
$hex = bin2hex($bin);
$dec = gmp_strval(gmp_init($hex, 16), 10);
echo $dec;

出力は次のようになります:

42540766411282592856906245548098208180

IPv6 アドレスを 10 進数に変換した後、long2ip() 関数または inet_ntop() 関数を使用して IP アドレスに復元できます。弦。例:

$ip_address = '2001:db8:85a3:0:0:8a2e:370:7334';
$bin = inet_pton($ip_address);
$hex = bin2hex($bin);
$dec = gmp_strval(gmp_init($hex, 16), 10);
$ip_new = inet_ntop($bin);
echo $ip_new;

出力は次のようになります:

2001:db8:85a3::8a2e:370:7334

結論

PHP は、IP アドレスの処理に使用できる一般的な Web 開発言語です。 IPv4 アドレスの場合、これは組み込み関数 ip2long() および long2ip() を使用するか、バイナリ データ変換メソッドを使用して処理できます。 IPv6 アドレスの場合、GMP 拡張などの他の方法を使用して変換および処理できます。適切な方法を選択すると、IP アドレスの処理がよりシンプルかつ高速になり、コード効率と開発効率が向上します。

以上がPHP で IPv4 と IPv6 を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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