Signatur
Beschreibung
long2ip() ist das Gegenstück zu ip2long() und wandelt eine als 32-Bit-Integer gespeicherte IPv4-Adresse zurück in das gewohnte Dotted-Decimal-Format (vier durch Punkte getrennte Dezimalzahlen, z. B. "203.0.113.42"). Die Funktion eignet sich überall dort, wo IP-Adressen platzsparend als Ganzzahl in einer Datenbank oder einem Protokoll gespeichert werden und für die Ausgabe wieder in lesbarer Form benötigt werden.
Typische Anwendungsfälle sind IP-Bereichsberechnungen (Subnetting), Logging-Systeme, Geolokationsdienste sowie Sicherheits- und Firewall-Anwendungen, die interne IP-Repräsentationen als Integer verwenden.
Negative Integers können auftreten, wenn auf 32-Bit-Systemen mit vorzeichenbehafteten Integern gearbeitet wird. Auf 64-Bit-Systemen gibt ip2long() immer eine positive Zahl zurück; long2ip() kommt jedoch mit beiden Vorzeichen-Varianten klar und liefert stets das korrekte Ergebnis.
Zu beachten ist, dass long2ip() ausschließlich IPv4-Adressen unterstützt. Für IPv6 sind andere Funktionen wie inet_ntop() und inet_pton() zu verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ip Pflicht | int | Die IPv4-Adresse als 32-Bit-Integer, wie sie z. B. von ip2long() zurückgegeben wird. |
Rückgabewert
"192.168.1.1"). Bei ungültigen Eingaben (z. B. außerhalb des 32-Bit-Bereichs) kann das Ergebnis unerwartete Werte liefern.Beispiele
Einfache Umwandlung einer Long-Integer-Adresse
<?php
$ip_long = ip2long('192.168.0.1');
echo $ip_long . PHP_EOL; // Ganzzahl
echo long2ip($ip_long) . PHP_EOL; // zurück zum lesbaren Format
IP-Adressen aus Datenbank lesen und anzeigen
<?php
// Simulierte DB-Ergebnisse: IPs sind als Integer gespeichert
$rows = [
['user' => 'alice', 'ip_int' => 2130706433], // 127.0.0.1
['user' => 'bob', 'ip_int' => 3232235777], // 192.168.1.1
['user' => 'carol', 'ip_int' => 167772161], // 10.0.0.1
];
foreach ($rows as $row) {
$readable = long2ip($row['ip_int']);
echo $row['user'] . ' hat sich von ' . $readable . ' eingeloggt.' . PHP_EOL;
}
Alle IPs eines /24-Subnetzes auflisten
<?php
$netzwerk_start = ip2long('192.168.100.0');
$netzwerk_ende = ip2long('192.168.100.5'); // Nur die ersten 6 zur Demo
for ($i = $netzwerk_start; $i <= $netzwerk_ende; $i++) {
echo long2ip($i) . PHP_EOL;
}
// Wichtig · Fallstricke
Nur IPv4: long2ip() unterstützt keine IPv6-Adressen. Für IPv6 sind inet_ntop() und inet_pton() zu verwenden.
Negative Integers auf 32-Bit-Systemen: Auf 32-Bit-Plattformen kann ip2long() für Adressen im Bereich 128.0.0.0–255.255.255.255 negative Werte liefern. long2ip() behandelt diese korrekt, da intern mit sprintf('%u', ...) gearbeitet wird. Beim Speichern in MySQL sollte der Spaltentyp INT UNSIGNED verwendet werden.
Sicherheit: Vor der Weitergabe von durch Benutzer übermittelten Integer-Werten an long2ip() sollte die Eingabe validiert werden, um sicherzustellen, dass die resultierende IP-Adresse keine internen Netzbereiche (Loopback, RFC-1918) betrifft, wenn dies sicherheitsrelevant ist.