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 IPUntuk 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, ChinaChina
125.110.0.0 -125.110.3.255 Guangdong, ChinaPangkalan 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 penggunaDalam 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 IPSetiap 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;
}
fseek($fp, 0, SEEK_SET);
$line_size = 24;
$mulakan = 0;
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
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.
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.Atas ialah kandungan terperinci rantau pertanyaan ip php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!