Maison  >  Article  >  développement back-end  >  Comment convertir un nombre entier en adresse IP en php

Comment convertir un nombre entier en adresse IP en php

PHPz
PHPzoriginal
2023-04-18 09:47:48645parcourir

Dans le domaine du développement Web, nous avons souvent besoin de convertir des nombres entiers en adresses IP, comme par exemple en enregistrant l'adresse IP enregistrée de l'utilisateur lors de l'inscription, ou lors de l'analyse des journaux d'accès au Web, nous devons convertir l'adresse IP en un entier pour une requête, etc. . En réponse à ce besoin, PHP fournit des fonctions pratiques ip2long() et long2ip(). La fonction

ip2long() convertit une adresse IPv4 en un nombre entier long (entier signé 32 bits), tandis que la fonction long2ip() convertit un nombre entier long en une adresse IPv4.

$ip = '192.168.0.1';
$long = ip2long($ip);
echo $long.PHP_EOL // Sortie : -1062731775

$long = -1062731775;
$ip = long2ip($long);
echo $ip.PHP_EOL; // Sortie : 192.168.0.1
?>

Mais il convient de noter que ces deux fonctions ne prennent en charge que les adresses IPv4. besoin d'utiliser d'autres moyens de le faire. De plus, PHP utilise l'ordre des octets du réseau (big-endian) lors du traitement des adresses IP et des conversions de nombres entiers.

L'ordre des octets du réseau fait référence à l'ordre des octets spécifié dans la pile de protocole TCP/IP, et les octets sont disposés de manière big-endian. Ce qu'on appelle le big endian signifie que l'octet de poids fort vient en premier et l'octet de poids faible en dernier. Par exemple, un entier 0x12345678 est représenté par 0x12, 0x34, 0x56, 0x78 dans l'ordre des octets du réseau.

Comment convertir une adresse IP en entier ?

Convertissez une adresse IP en entier de la manière suivante :

function ip2long_v2($ip) {

$ipArr = explode(".", $ip); // 将IP地址拆分成数组
$num = 0;
foreach ($ipArr as $k => $v) {
    $num = $num << 8; // 左移8位 
    $num += intval($v); // 叠加 
}
return $num;

}
?>

Cette fonction divise l'adresse IP en un tableau, puis Chaque chiffre est décalé et superposé, puis finalement converti en nombre entier.

Comment convertir un entier en adresse IP ?

Convertissez un entier en adresse IP de la manière suivante :

function long2ip_v2($long) {

$arr = array(
    ($long & 0xff000000) >> 24,
    ($long & 0x00ff0000) >> 16,
    ($long & 0x0000ff00) >> 8,
    ($long & 0x000000ff)
);
return implode('.', $arr);

}
?>

Cette fonction exploite l'entier au niveau du bit puis le convertit. Convertissez-le dans un tableau, puis concatènez le tableau en une adresse IP.

Résumé

PHP fournit des fonctions pratiques ip2long() et long2ip(), qui peuvent convertir des adresses IP et des entiers les uns vers les autres. Cependant, il convient de noter que ces deux fonctions ne prennent en charge que les adresses IPv4 et utilisent l'ordre des octets du réseau. Si vous devez gérer des adresses IPv6, vous devez utiliser d'autres méthodes pour y parvenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn