Bagaimana untuk menukar nombor integer kepada alamat ip dalam php

PHPz
Lepaskan: 2023-04-18 10:14:39
asal
710 orang telah melayarinya

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;
Salin selepas log masuk

}
?>

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!

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