Rumah > pembangunan bahagian belakang > masalah PHP > rantau pertanyaan ip php

rantau pertanyaan ip php

WBOY
Lepaskan: 2023-05-06 15:27:07
asal
2037 orang telah melayarinya

Dengan perkembangan pesat Internet, semakin banyak laman web dan aplikasi perlu melaksanakan fungsi rantau pertanyaan alamat IP. Kawasan pertanyaan alamat IP boleh menyediakan pengguna dengan perkhidmatan yang lebih tepat dan menyediakan sokongan data yang lebih halus untuk perniagaan.

Adalah mudah untuk melaksanakan fungsi rantau pertanyaan alamat IP dalam bahasa PHP. Artikel ini akan memperkenalkan prinsip dan kaedah melaksanakan pertanyaan alamat IP dalam PHP, dan membantu pembaca memahami cara melaksanakan fungsi pertanyaan wilayah alamat IP dalam tapak web dan aplikasi mereka sendiri.

1. Prinsip pertanyaan alamat IP

Prinsip rantau pertanyaan alamat IP adalah untuk menukar alamat IP kepada nilai perpuluhan yang sepadan, dan mendapatkan wilayah yang sepadan dengan menanyakan IP yang telah disediakan sebelumnya alamat maklumat perpustakaan. Pangkalan data alamat IP biasanya mengandungi julat alamat IP dan maklumat serantau yang sepadan, seperti negara, bandar, dsb.

2. Tukar alamat IP kepada nilai perpuluhan

Alamat IP terdiri daripada empat nombor binari 8-bit, dan julat nilai setiap tatasusunan ialah 0~255. Alamat IP boleh ditukar kepada nilai perpuluhan. Kaedah penukaran khusus adalah seperti berikut:

Alihkan tatasusunan pertama ke kiri sebanyak 24 bit, alih tatasusunan kedua ke kiri sebanyak 16 bit, alih tatasusunan ketiga ke kiri sebanyak 8 bit, biarkan tatasusunan keempat tatasusunan tidak berubah, dan alihkan empat tatasusunan ke kiri Lakukan operasi ATAU bitwise untuk mendapatkan nilai perpuluhan yang sepadan dengan alamat IP.

Sebagai contoh, jika alamat IP ialah 192.168.0.1, proses menukarnya kepada nilai perpuluhan adalah seperti berikut:

192 << 24 = 3232235520

168 << 16 = 1107296256

0 << 🎜>

3. Penyediaan perpustakaan alamat IP

Untuk melaksanakan fungsi kawasan pertanyaan alamat IP, anda perlu menyediakan perpustakaan alamat IP. Pustaka ini boleh dimuat turun atau dibeli daripada beberapa tapak web awam atau pembekal data.

Format pangkalan data alamat IP biasanya ialah fail teks dan setiap baris menyimpan segmen alamat IP dan maklumat wilayah yang sepadan. Sebagai contoh, berikut ialah contoh fail perpustakaan alamat IP:

125.78.0.0-125.79.255.255 Shanghai, China

125.103.0.0-125.103.127.255 Zhejiang, China

China

125.110.0.0 -125.110.3.255 Guangdong, China

Pangkalan data alamat IP boleh disimpan dan diurus menggunakan pangkalan data MySQL Khususnya, nilai perpuluhan nilai permulaan dan akhir Segmen alamat IP disimpan dalam jadual dan diindeks untuk meningkatkan kecekapan Pertanyaan.

4. PHP melaksanakan fungsi kawasan pertanyaan alamat IP

Untuk melaksanakan fungsi rantau pertanyaan alamat IP dalam bahasa PHP, langkah berikut diperlukan:

1 alamat IP pengguna

Dalam bahasa PHP, anda boleh menggunakan pembolehubah global $_SERVER['REMOTE_ADDR'] untuk mendapatkan alamat IP pengguna. Pembolehubah ini menyimpan alamat IP pengguna, contohnya:

$user_ip = $_SERVER['REMOTE_ADDR'];

2. Tukar alamat IP kepada nilai perpuluhan yang sepadan

Gunakan fungsi ip2long() PHP untuk menukar alamat IP kepada nilai perpuluhan yang sepadan, contohnya:

$ip_long = ip2long($user_ip);

3 Maklumat alamat IP

Setiap baris dalam pangkalan data alamat IP menyimpan segmen alamat IP dan maklumat wilayah yang sepadan. Oleh itu, adalah perlu untuk menyusun fail perpustakaan alamat IP mengikut "alamat IP dari kecil ke besar" dan menggunakan algoritma carian binari untuk bertanya sama ada alamat IP pengguna berada dalam pustaka alamat IP. Jika ia wujud, kembalikan maklumat wilayah yang sepadan.

Kod pelaksanaan khusus adalah seperti berikut:

function query_region_by_ip($ip_long, $ip_file) {

$region = 'Tidak diketahui';

$fp = fopen($ip_file) , 'rb');

jika (!$fp) {

return $region;
Salin selepas log masuk

}
fseek($fp, 0, SEEK_SET);
$line_size = 24;
$mulakan = 0;

$end = filesize($ip_file) / $line_size - 1;

manakala ($mula <= $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 Ringkasan

Rantau pertanyaan alamat IP ialah salah satu keperluan biasa tapak web dan aplikasi. Melaksanakan fungsi rantau pertanyaan alamat IP boleh menyediakan pengguna dengan perkhidmatan yang lebih diperibadikan dan meningkatkan kepuasan pengguna dan kelekatan pengguna.

Artikel ini memperkenalkan prinsip dan kaedah PHP untuk melaksanakan rantau pertanyaan alamat IP, termasuk proses terperinci untuk menukar alamat IP kepada nilai perpuluhan yang sepadan, menyediakan perpustakaan alamat IP dan menggunakan program PHP untuk melaksanakan pertanyaan alamat IP fungsi wilayah. Pembaca boleh menyesuaikan dan mengoptimumkan mengikut keperluan dan keadaan sebenar mereka sendiri.

Atas ialah kandungan terperinci rantau pertanyaan ip php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan