1

PHP super-global を使用して、IPv4 でクライアント IP アドレスを取得したいと考えています$_SERVER['REMOTE_ADDR']。ただし、ローカルホストでテストすると、のような IPv6 アドレスが返されます::1

Mac OS のデフォルトの Apache サーバーを使用しています。これは関連していますか?もしそうなら、代わりにIPv4形式を強制的に使用する方法を教えてください。

4

2 に答える 2

3

すべての ipv6 アドレスを同等の ipv4 アドレスにマップすることはできません..

コードをipv6にも適応させる必要があります..

于 2012-11-04T06:23:40.937 に答える
2

サーバーではなく、使用するプロトコルを決定するのは常にクライアントです。クライアントは、ホスト名を検索して利用可能なプロトコルを決定します。多くの場合、これは、名前が定義されているかどうかを確認するために /etc/hosts を調べることを意味します。そうでない場合は、DNS 要求を使用して名前を解決します。

Mac OS X では、localhost という名前が /etc/hosts で定義されており、IPv4 (127.0.0.1) と IPv6 アドレス (::1) の両方が含まれているため、クライアントは両方を使用できると通知されます。テストに IPv4 のみを使用する場合は、/etc/hosts に名前を追加できます。展開用の場合は、DNS サーバーが IPv4 アドレスのみで応答することを確認する必要があります。もちろん、正しいホスト名に一致するように Apache 構成を調整する必要があります。

しかし、これはすべて問題を回避しているだけです。IPv6 アドレスを処理できる必要があります

IPv6 は世界中で採用されており、ローカルホストに表示される IPv6 アドレスはそのほんの一例です。私がビジネスを行っているすべてのデータセンターは、ホスティング サーバーに IPv6 を提供しています。ルーマニアのほぼ 10% の家庭で IPv6 が使用されています。米国のほぼ 2% が自宅に IPv6 を導入しています。ここオランダには、ユーザーに IPv6 を提供している ISP が少なくとも 4 つあります。等。

プロジェクトで今すぐ IPv6 のサポートを提供しないと、1 年か 2 年で何かが壊れる可能性が高くなります。

于 2012-11-04T10:47:21.103 に答える