ホームページ >バックエンド開発 >PHPの問題 >PHP IPクエリリージョン

PHP IPクエリリージョン

WBOY
WBOYオリジナル
2023-05-06 15:27:072009ブラウズ

インターネットの急速な発展に伴い、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) ;
return $region;
}

5. 概要

IP アドレス クエリ リージョンは、Web サイトとアプリケーションの一般的なニーズの 1 つです。 IPアドレスクエリ領域の機能を実装することで、よりパーソナライズされたサービスをユーザーに提供でき、ユーザーの満足度やユーザーの定着率を向上させることができます。

この記事では、IP アドレスを対応する 10 進数値に変換する詳細なプロセス、IP アドレス ライブラリの準備、PHP プログラムを使用した IP アドレス クエリの実装など、PHP で IP アドレス クエリ領域を実装する原理と方法を紹介します。地域機能。読者は、自分のニーズや実際の状況に応じて調整および最適化できます。

以上がPHP IPクエリリージョンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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