W3docs

Fonction PHP long2ip() : tout ce que vous devez savoir

Découvrez comment la fonction PHP long2ip() convertit un entier 32 bits en adresse IPv4 lisible au format pointé, avec exemples pratiques.

Une adresse IPv4 telle que 127.0.0.1 n'est, en coulisses, qu'un nombre 32 bits. Les bases de données et les protocoles binaires stockent souvent les adresses sous cette forme entière compacte, car comparer et indexer un entier est plus rapide et plus léger que comparer une chaîne. Lorsque vous relisez une telle valeur, vous devez la convertir en notation en quatre octets séparés par des points, familière aux humains. La fonction intégrée long2ip() de PHP effectue exactement cette conversion.

Ce chapitre explique ce que fait la fonction, comment les entiers correspondent aux adresses IPv4, le piège des entiers signés/non signés que vous rencontrerez tôt ou tard, et les cas d'utilisation réels de cette fonction.

Qu'est-ce que la fonction long2ip() ?

long2ip() convertit un entier 32 bits encodant une adresse IPv4 en sa chaîne en quatre octets séparés par des points lisible par un humain (par exemple 192.168.0.1).

Un format pointé est composé de quatre nombres 8 bits (chacun entre 0 et 255) joints par des points. Puisque chaque octet représente un byte, l'adresse entière tient en 4 octets = 32 bits. long2ip() décompose simplement cet entier en quatre octets :

3232235521  ->  11000000.10101000.00000000.00000001  ->  192.168.0.1
                 192        168       0          1

Syntaxe

long2ip(int $ip): string
  • $ip — l'entier 32 bits représentant l'adresse IPv4. Il doit être de type int ; passer une chaîne lève une TypeError en PHP 8+.
  • Valeur de retour — l'adresse sous forme de string en quatre octets séparés par des points.

Exemple de base

php— editable, runs on the server

L'entier 2130706433 se décode en l'adresse de bouclage 127.0.0.1, que echo affiche à l'écran.

Autres exemples

Quelques valeurs courantes permettent de mieux comprendre la correspondance :

<?php

echo long2ip(0),          "\n"; // 0.0.0.0          (lowest possible)
echo long2ip(3232235521), "\n"; // 192.168.0.1      (private LAN)
echo long2ip(4294967295), "\n"; // 255.255.255.255  (highest possible)

0 est la plus petite valeur 32 bits et correspond à 0.0.0.0 ; 4294967295 (soit 2^32 - 1) est la plus grande et correspond au 255.255.255.255 de type diffusion.

Aller-retour avec ip2long()

long2ip() est l'inverse de ip2long(), qui convertit une chaîne en quatre octets séparés par des points en sa forme entière. Les deux fonctions s'annulent mutuellement :

<?php

$ip   = "8.8.8.8";
$long = ip2long($ip);        // 134744072
echo long2ip($long);         // 8.8.8.8 — back where we started

Cette association constitue le flux de travail habituel : stocker ip2long($address) en tant que colonne entière dans votre base de données, puis appeler long2ip() lorsque vous avez besoin d'afficher ou de journaliser la valeur.

Le piège des entiers signés

Sur une plateforme 32 bits, ip2long() peut retourner un nombre négatif pour les adresses supérieures à 127.x.x.x, car le bit de poids fort est interprété comme un signe. Vous pouvez également rencontrer des valeurs négatives si un entier a été stocké dans une colonne de base de données signée. long2ip() accepte ces valeurs signées et les décode correctement :

<?php

echo long2ip(-1); // 255.255.255.255

Vous n'avez donc pas besoin de « corriger » un entier négatif avant de le passer à long2ip() — mais soyez attentif à l'origine du négatif, et préférez les plateformes 64 bits (la norme aujourd'hui) où la valeur non signée est préservée.

Quand utiliser cette fonction ?

  • Stocker les adresses efficacement — une colonne INT UNSIGNED (ou BIGINT) est plus petite et plus rapide à indexer qu'un VARCHAR(15), et le filtrage par plage d'IP (WHERE ip BETWEEN ? AND ?) devient une simple arithmétique entière.
  • Lire des données binaires — les protocoles et les en-têtes de paquets transportent les adresses sous forme d'entiers 32 bits bruts ; long2ip() les rend lisibles.
  • Journalisation et analyse — convertissez les entiers stockés en chaînes seulement au moment de l'affichage.

Pour IPv6, long2ip() ne s'applique pas — les adresses IPv6 sont sur 128 bits. Utilisez plutôt inet_ntop() / inet_pton(), qui gèrent à la fois IPv4 et IPv6. Consultez le chapitre sur les fonctions réseau PHP pour une vue d'ensemble.

Conclusion

long2ip() transforme un entier 32 bits en adresse IPv4 lisible par un humain, la contrepartie naturelle de ip2long(). Associez les deux fonctions pour stocker les adresses de manière compacte sous forme d'entiers tout en les affichant sous forme de chaînes en quatre octets séparés par des points, et n'oubliez pas que la fonction gère de manière transparente les entiers signés que les systèmes 32 bits produisent parfois.

Entraînement

Pratique
Que fait la fonction PHP long2ip() ?
Que fait la fonction PHP long2ip() ?
Was this page helpful?