Dalam bidang pembangunan web, kita selalunya perlu menukar nombor integer kepada alamat IP, seperti merekodkan IP berdaftar pengguna semasa mendaftar, atau semasa menganalisis log akses web, kita perlu menukar alamat IP kepada integer untuk pertanyaan , dsb. Sebagai tindak balas kepada keperluan ini, PHP menyediakan fungsi ip2long() dan long2ip() yang mudah.
Fungsi ip2long() menukarkan alamat IPv4 kepada nombor integer panjang (integer bertanda 32-bit), manakala fungsi long2ip() menukar nombor integer panjang kepada alamat IPv4.
$ip = '192.168.0.1';
$long = ip2long($ip);
gema $long.PHP_EOL; // Output: -1062731775
$long = -1062731775;
$ip = long2ip($long);
gema $ip.PHP_EOL; // Output: 192.168.0.1
?>
Walau bagaimanapun, perlu diingatkan bahawa kedua-dua fungsi ini hanya menyokong alamat IPv4 Jika anda perlu mengendalikan alamat IPv6, anda perlu menggunakan kaedah lain untuk mencapainya. Selain itu, PHP menggunakan susunan bait rangkaian (big-endian) apabila memproses alamat IP dan penukaran nombor integer.
Turutan bait rangkaian merujuk kepada susunan bait yang dinyatakan dalam timbunan protokol TCP/IP, dan bait disusun dalam cara yang besar-endian. Endian besar yang dipanggil bermaksud bait tertib tinggi didahulukan dan bait tertib rendah didahulukan. Sebagai contoh, integer 0x12345678 diwakili sebagai 0x12, 0x34, 0x56, 0x78 dalam susunan bait rangkaian.
Bagaimana untuk menukar alamat ip kepada integer?
Untuk menukar alamat ip kepada integer, anda boleh melakukannya dengan cara berikut:
fungsi ip2long_v2($ip) {
$ipArr = explode(".", $ip); // 将IP地址拆分成数组 $num = 0; foreach ($ipArr as $k => $v) { $num = $num << 8; // 左移8位 $num += intval($v); // 叠加 } return $num;
}
?>
Fungsi ini membahagikan alamat IP kepada tatasusunan, kemudian menganjak dan menindih setiap digit, dan akhirnya menukarkannya kepada integer.
Bagaimana untuk menukar integer kepada alamat IP?
Untuk menukar integer kepada alamat IP, anda boleh melakukannya dengan cara berikut:
function long2ip_v2($long) {
$arr = array( ($long & 0xff000000) >> 24, ($long & 0x00ff0000) >> 16, ($long & 0x0000ff00) >> 8, ($long & 0x000000ff) ); return implode('.', $arr);}
?>Fungsi ini menukar integer kepada tatasusunan selepas operasi bitwise, dan kemudian menyambung tatasusunan ke alamat ip.
Ringkasan
PHP menyediakan fungsi ip2long() dan long2ip() yang mudah, yang boleh menukar alamat IP dan integer kepada dan daripada satu sama lain. Walau bagaimanapun, perlu diingatkan bahawa kedua-dua fungsi ini hanya menyokong alamat IPv4 dan menggunakan susunan bait rangkaian. Jika anda perlu mengendalikan alamat IPv6, anda perlu menggunakan kaedah lain untuk mencapainya.
Atas ialah kandungan terperinci Bagaimana untuk menukar nombor integer kepada alamat ip dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!