Maison  >  Article  >  développement back-end  >  Comment gérer IPv4 et IPv6 en PHP ?

Comment gérer IPv4 et IPv6 en PHP ?

王林
王林original
2023-05-24 08:25:352095parcourir

PHP est un langage de développement Web populaire. Il s'agit d'un langage non typé qui peut être utilisé pour gérer une variété de types de données, y compris les adresses IP. Sur Internet, les adresses IP occupent une place très importante à l’ère du numérique. Cependant, PHP ne fournit pas de bibliothèque intégrée pour gérer les adresses IP comme les autres langages de programmation.

Dans cet article, nous explorerons comment gérer les adresses IPv4 et IPv6 en PHP.

Que sont IPv4 et IPv6 ?

IPv4 est actuellement le protocole d'adresse IP le plus utilisé. Il s'agit d'une adresse de 32 bits et peut accueillir un total de 4,2 milliards d'adresses. Cependant, avec le développement rapide d’Internet, IPv4 ne peut plus répondre aux besoins actuels. Parce que les adresses IPv4 ne suffisent plus, les adresses IPv6 apparaissent. Une adresse IPv6 est une adresse de 128 bits pouvant accueillir 2 puissances 128 d'adresses, un nombre suffisant pour répondre à la demande pour les décennies à venir.

Comment gérer IPv4 en PHP ?

Pour les adresses IPv4, PHP fournit une fonction intégrée ip2long() qui peut convertir les adresses IPv4 en entiers 32 bits. Cette fonction accepte une chaîne d'adresse IPv4 comme paramètre et renvoie une valeur entière représentant l'adresse.
Par exemple :

$ip_address = '192.168.1.1';
$ip_long = ip2long($ip_address);
echo $ip_long;

Le résultat sera :

-1062731775

Comme vous pouvez le voir, lors de la conversion de l'adresse IP en un entier, sa valeur est un nombre négatif . En PHP, puisque le type entier signé ne fait que 31 bits, vous devez utiliser un entier non signé ou la fonction long2ip() pour restaurer l'entier dans une chaîne d'adresse IP. Par exemple :

$ip_address = '192.168.1.1';
$ip_long = ip2long($ip_address);
$ip_new = long2ip($ip_long);
echo $ip_new;

Le résultat sera à nouveau :

192.168.1.1

Comment gérer IPv6 en PHP ?

PHP ne fournit pas de fonctions comme ip2long() pour gérer les adresses IPv6. Cependant, d'autres méthodes peuvent être utilisées pour gérer les adresses IPv6. Par exemple, une adresse IPv6 peut être convertie en tableau d'octets en utilisant l'ordre des octets du réseau. L'ordre des octets du réseau est un ordre d'octets standard qui garantit un transfert correct des données entre de nombreuses architectures de processeur différentes.

$ip_address = "2001:db8:85a3:0:0:8a2e:370:7334";
$ip_bin = inet_pton($ip_address);
$ip_hex = bin2hex($ip_bin);
echo $ip_hex;

Le résultat sera :

20010db885a30000008a2e03707334

Ou utilisez l'extension GMP de PHP pour gérer les adresses IPv6 plus facilement. L'extension GMP est une bibliothèque de calcul mathématique fournie par PHP pour traiter de très grands nombres.

$ip_address = '2001:db8:85a3:0:0:8a2e:370:7334';
$bin = inet_pton($ip_address);
$hex = bin2hex($bin);
$dec = gmp_strval(gmp_init($hex, 16), 10);
echo $dec;

Le résultat sera :

42540766411282592856906245548098208180

Après avoir converti l'adresse IPv6 en nombre décimal, vous pouvez utiliser la fonction long2ip() ou la fonction inet_ntop() pour la restaurer à une chaîne d’adresse IP. Par exemple :

$ip_address = '2001:db8:85a3:0:0:8a2e:370:7334';
$bin = inet_pton($ip_address);
$hex = bin2hex($bin);
$dec = gmp_strval(gmp_init($hex, 16), 10);
$ip_new = inet_ntop($bin);
echo $ip_new;

Le résultat sera :

2001:db8:85a3::8a2e:370:7334

Conclusion

PHP est un langage de développement Web populaire qui peut être utilisé pour gérer les adresses IP. . Pour les adresses IPv4, cela peut être géré à l'aide des fonctions intégrées ip2long() et long2ip() ou à l'aide de la méthode de conversion de données binaires. Pour les adresses IPv6, d'autres méthodes telles que les extensions GMP peuvent être utilisées pour les convertir et les traiter. Choisir la méthode appropriée peut rendre le traitement des adresses IP plus simple et plus rapide, et améliorer l'efficacité du code et du développement.

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