Start · Sprachen · PHP · Referenz · long2ip

long2ip

Funktion

Konvertiert eine 32-Bit-Ganzzahl (Long Integer) in eine IPv4-Adresse im menschenlesbaren Dotted-Decimal-Format (z. B. <code>192.168.0.1</code>).

seit PHP 4.0.0 Kategorie: http

Signatur

long2ip(int $ip): string

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

Typ
string
Beschreibung
Gibt die IPv4-Adresse als String im Dotted-Decimal-Format zurück (z. B. "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
3232235521 192.168.0.1

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;
}
alice hat sich von 127.0.0.1 eingeloggt. bob hat sich von 192.168.1.1 eingeloggt. carol hat sich von 10.0.0.1 eingeloggt.

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;
}
192.168.100.0 192.168.100.1 192.168.100.2 192.168.100.3 192.168.100.4 192.168.100.5

// 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.0255.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.