インターネットの急速な発展に伴い、IP アドレス クエリ領域の機能を実装する必要がある Web サイトやアプリケーションがますます増えています。 IP アドレス クエリ エリアは、ユーザーにより正確なサービスを提供し、企業に対してより洗練されたデータ サポートを提供できます。
IP アドレスクエリ領域の機能を PHP 言語で実装するのは比較的簡単です。この記事では、PHP で IP アドレス クエリを実装する原理と方法を紹介し、読者が自分の Web サイトやアプリケーションに IP アドレス リージョン クエリ機能を実装する方法を理解できるようにします。
1. IP アドレス クエリの原理
IP アドレス クエリ領域の原理は、IP アドレスを対応する 10 進数値に変換し、事前に用意された IP アドレスをクエリすることで、対応する領域を取得することです。図書館情報。通常、IP アドレス データベースには、IP アドレスの範囲と、国、都市などの対応する地域情報が含まれています。
2. IP アドレスを 10 進数値に変換する
IP アドレスは 4 つの 8 ビット 2 進数で構成され、各配列の値の範囲は 0 ~ 255 です。 IPアドレスは10進数に変換できます。具体的な変換方法は次のとおりです。
最初の配列を 24 ビット左にシフトし、2 番目の配列を 16 ビット左にシフトし、3 番目の配列を 8 ビット左にシフトし、4 番目の配列をそのままにします。配列は変更せず、4 つの配列を左にシフトします。ビットごとの OR 演算を実行して、IP アドレスに対応する 10 進数値を取得します。
たとえば、IP アドレスが 192.168.0.1 の場合、10 進数値に変換するプロセスは次のとおりです:
192 << 24 = 3232235520
168 << 16 = 1107296256
0 << 8 = 0
1 = 1
3232235520 | 1107296256 | 0 | 1 = 3232235521
3. IP アドレスライブラリの準備
IP アドレスクエリ領域の機能を実現するには、IP アドレスライブラリを準備する必要があります。このライブラリは、一部の公開 Web サイトまたはデータ プロバイダーからダウンロードまたは購入できます。
IP アドレス データベースの形式は通常テキスト ファイルであり、各行に IP アドレス セグメントと対応する地域情報が格納されます。たとえば、次は IP アドレス ライブラリ ファイルの例です。
125.78.0.0-125.79.255.255 Shanghai, China
125.103.0.0-125.103.127.255 Zhejiang, China
125.110.0.0 -125.110.3.255 Guangdong, China
IP アドレス データベースは、MySQL データベースを使用して保存および管理できます。具体的には、IP アドレス データベースの開始値と終了値の 10 進数値は、 IP アドレス セグメントはテーブルに保存され、クエリ効率を向上させるためにインデックスが付けられます。
4. PHP は IP アドレス クエリ領域関数を実装します
IP アドレス クエリ領域関数を PHP 言語で実装するには、次の手順が必要です:
1.ユーザーの IP アドレス
PHP 言語では、$_SERVER['REMOTE_ADDR'] グローバル変数を使用してユーザーの IP アドレスを取得できます。この変数にはユーザーの IP アドレスが格納されます (例:
$user_ip = $_SERVER['REMOTE_ADDR'];
2。IP アドレスを対応する 10 進数値に変換します
##) #PHP の ip2long() 関数を使用して、IP アドレスを対応する 10 進数値に変換します (例: $ip_long = ip2long($user_ip);3. に対応する領域をクエリします。 IP アドレス情報IP アドレス データベースの各行には、IP アドレス セグメントと対応する地域情報が格納されます。したがって、「IP アドレスが小さいものから大きいもの」に従って IP アドレス ライブラリ ファイルを配置し、二分探索アルゴリズムを使用して、ユーザーの IP アドレスが IP アドレス ライブラリにあるかどうかを照会する必要があります。存在する場合は、対応する地域情報を返します。 具体的な実装コードは次のとおりです。 function query_region_by_ip($ip_long, $ip_file) { $region = 'Unknown';
$fp = fopen($ip_file) , 'rb');
if (!$fp) {
return $region;
fseek($fp, 0, SEEK_SET);
$line_size = 24;
$begin = 0;
$end = filesize($ip_file) / $line_size - 1;
while ($begin <= $end) {
$middle = intval(($begin + $end) / 2); fseek($fp, $middle * $line_size, SEEK_SET); $line = fread($fp, $line_size); $start_ip = unpack('N', substr($line, 0, 4))[1]; $end_ip = unpack('N', substr($line, 4, 4))[1]; if ($ip_long < $start_ip) { $end = $middle - 1; } elseif ($ip_long > $end_ip) { $begin = $middle + 1; } else { $off = unpack('V', substr($line, 8, 2) . "\x0\x0")[1]; fseek($fp, $off, SEEK_SET); $region = rtrim(fread($fp, $line_size - 8)); break; }}fclose($fp) ;
5. 概要IP アドレス クエリ リージョンは、Web サイトとアプリケーションの一般的なニーズの 1 つです。 IPアドレスクエリ領域の機能を実装することで、よりパーソナライズされたサービスをユーザーに提供でき、ユーザーの満足度やユーザーの定着率を向上させることができます。 この記事では、IP アドレスを対応する 10 進数値に変換する詳細なプロセス、IP アドレス ライブラリの準備、PHP プログラムを使用した IP アドレス クエリの実装など、PHP で IP アドレス クエリ領域を実装する原理と方法を紹介します。地域機能。読者は、自分のニーズや実際の状況に応じて調整および最適化できます。
return $region;
}以上がPHP IPクエリリージョンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。