Fonction PHP ip2long() : Tout ce que vous devez savoir
En tant que développeur PHP, vous pouvez avoir besoin de convertir une adresse IP en entier long. La fonction ip2long() est une fonction intégrée en PHP.
En tant que développeur PHP, vous pouvez avoir besoin de convertir une adresse IP d'un format lisible par l'homme en un entier long. La fonction ip2long() est une fonction intégrée de PHP qui effectue cette conversion. Cet article couvre sa syntaxe, son utilisation et ses mises en garde importantes.
Qu'est-ce que la fonction ip2long() ?
La fonction ip2long() convertit une adresse IPv4 standard (en notation pointée, comme 192.168.0.1) en son entier 32 bits correspondant.
Une adresse IPv4 n'est en réalité que quatre octets. ip2long() regroupe ces quatre octets en un seul nombre : le premier octet devient l'octet de poids fort, le dernier octet le poids faible. Ainsi, 127.0.0.1 devient 127 × 256³ + 0 × 256² + 0 × 256 + 1 = 2130706433.
Pourquoi convertir une IP en entier ?
Stocker des adresses IP sous forme d'entiers plutôt que de chaînes de caractères présente de réels avantages :
- Stockage réduit : une colonne
INT UNSIGNEDoccupe 4 octets contre jusqu'à 15 caractères pour la forme textuelle. - Comparaisons et requêtes de plage plus rapides : vérifier si une IP se situe dans une plage CIDR devient une simple opération arithmétique entière (
WHERE ip BETWEEN :start AND :end). - Indexation : les index entiers sont plus compacts et plus rapides que les index de chaînes.
Si vous avez seulement besoin d'afficher l'adresse, conservez-la sous forme de chaîne. La forme entière est avantageuse lorsque vous stockez, triez ou effectuez des recherches par plage sur de nombreuses adresses.
Comment utiliser la fonction ip2long() ?
L'utilisation de la fonction ip2long() est simple. Voici la syntaxe :
Syntaxe PHP de la fonction ip2long()
ip2long($ip_address);La fonction prend un paramètre :
$ip_address: l'adresse IP à convertir en entier long.
Voici un exemple d'utilisation de la fonction ip2long() avec validation et formatage non signé :
Comment utiliser la fonction ip2long() ?
Dans cet exemple, nous convertissons l'adresse IP "127.0.0.1" en entier long. Nous vérifions si le résultat est false (ce qui indique une entrée invalide) et utilisons sprintf('%u', ...) pour afficher la valeur sous forme d'entier non signé.
Conversion inverse : ip2long() et long2ip()
ip2long() possède une fonction miroir, long2ip(), qui reconvertit l'entier en chaîne pointée. Ensemble, elles forment un aller-retour parfait :
<?php
$ip = "192.168.1.1";
$int = ip2long($ip); // signed 32-bit value
$stored = sprintf('%u', $int); // unsigned string for storage: 3232235777
echo $stored . "\n"; // 3232235777
echo long2ip($int) . "\n"; // 192.168.1.1Notez que long2ip() accepte directement la valeur signée retournée par ip2long(), vous n'avez donc pas besoin de reconvertir la forme non signée avant de l'appeler.
Remarques importantes
- Sortie non signée :
ip2long()retourne un entier 32 bits signé. Pour les adresses IP dans la plage haute (par exemple,192.168.1.1), elle peut retourner un nombre négatif. Utilisez toujourssprintf('%u', ip2long($ip))lors du stockage ou de l'affichage du résultat. - Support IPv6 :
ip2long()ne prend en charge que les adresses IPv4. Pour IPv6, utilisez plutôt la fonctioninet_pton().
Conclusion
La fonction ip2long() offre un moyen simple de convertir des adresses IPv4 en entiers pour le stockage ou la comparaison. N'oubliez pas de valider la valeur de retour et d'utiliser sprintf('%u', ...) pour une sortie non signée cohérente. Nous espérons que ce guide vous aidera à implémenter efficacement la conversion d'adresses IP dans vos applications PHP.