PHP long2ip()-Funktion: Alles, was Sie wissen müssen
Die PHP-Funktion long2ip() wandelt einen 32-Bit-Integer, der eine IPv4-Adresse kodiert, in die lesbare Punkt-Dezimal-Schreibweise um.
Eine IPv4-Adresse wie 127.0.0.1 ist intern nur eine 32-Bit-Zahl. Datenbanken und Binärprotokolle speichern Adressen häufig in dieser kompakten Integer-Form, weil das Vergleichen und Indizieren einer Ganzzahl schneller und platzsparender ist als das Vergleichen eines Strings. Wenn Sie einen solchen Wert wieder auslesen, müssen Sie ihn in die bekannte Punkt-Dezimal-Schreibweise umwandeln, die Menschen erkennen. Die eingebaute PHP-Funktion long2ip() erledigt genau diese Konvertierung.
Dieses Kapitel erklärt, was die Funktion tut, wie Integers auf IPv4-Adressen abgebildet werden, den signed/unsigned-Fallstrick, auf den Sie früher oder später stoßen werden, und wo die Funktion tatsächlich nützlich ist.
Was ist die long2ip()-Funktion?
long2ip() wandelt einen 32-Bit-Integer, der eine IPv4-Adresse kodiert, in seinen menschenlesbaren Punkt-Dezimal-String um (zum Beispiel 192.168.0.1).
Ein Punkt-Dezimal-Wert besteht aus vier 8-Bit-Zahlen (jeweils 0–255), die durch Punkte getrennt sind. Da jedes Oktett ein Byte ist, passt die gesamte Adresse in 4 Bytes = 32 Bits. long2ip() teilt diesen Integer einfach wieder in vier Bytes auf:
3232235521 -> 11000000.10101000.00000000.00000001 -> 192.168.0.1
192 168 0 1Syntax
long2ip(int $ip): string$ip— der 32-Bit-Integer, der die IPv4-Adresse repräsentiert. Es muss einintsein; die Übergabe eines Strings wirft in PHP 8+ einenTypeError.- Rückgabewert — die Adresse als Punkt-Dezimal-
string.
Grundlegendes Beispiel
Der Integer 2130706433 wird in die Loopback-Adresse 127.0.0.1 dekodiert, die echo auf dem Bildschirm ausgibt.
Weitere Beispiele
Einige häufig verwendete Werte machen die Zuordnung deutlicher:
<?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 ist der kleinste 32-Bit-Wert und entspricht 0.0.0.0; 4294967295 (also 2^32 - 1) ist der größte und entspricht dem Broadcast-artigen 255.255.255.255.
Hin- und Rückkonvertierung mit ip2long()
long2ip() ist die Umkehrfunktion von ip2long(), die einen Punkt-Dezimal-String in seine Integer-Form umwandelt. Die beiden Funktionen heben sich gegenseitig auf:
<?php
$ip = "8.8.8.8";
$long = ip2long($ip); // 134744072
echo long2ip($long); // 8.8.8.8 — back where we startedDieses Paar ist der typische Arbeitsablauf: Speichern Sie ip2long($address) als Integer-Spalte in Ihrer Datenbank und rufen Sie long2ip() auf, wenn Sie die Adresse anzeigen oder protokollieren möchten.
Der signed-Integer-Fallstrick
Auf einer 32-Bit-Plattform kann ip2long() für Adressen über 127.x.x.x eine negative Zahl zurückgeben, weil das höchste Bit als Vorzeichen interpretiert wird. Negative Werte können auch auftreten, wenn ein Integer in einer signierten Datenbankspalte gespeichert wurde. long2ip() akzeptiert diese signierten Werte und dekodiert sie trotzdem korrekt:
<?php
echo long2ip(-1); // 255.255.255.255Sie müssen einen negativen Integer also nicht „korrigieren", bevor Sie ihn an long2ip() übergeben — behalten Sie jedoch im Blick, woher der negative Wert stammt, und bevorzugen Sie 64-Bit-Plattformen (heute der Standard), auf denen der unsigned-Wert erhalten bleibt.
Wann würde ich das verwenden?
- Adressen effizient speichern — eine
INT UNSIGNED- (oderBIGINT-) Spalte ist kleiner und schneller zu indizieren als einVARCHAR(15), und IP-Bereichsfilterung (WHERE ip BETWEEN ? AND ?) wird zu einfacher Integer-Mathematik. - Binärdaten lesen — Protokolle und Paketheader übertragen Adressen als rohe 32-Bit-Integer;
long2ip()macht sie lesbar. - Protokollierung und Analyse — gespeicherte Integer werden nur zur Anzeigezeit in Strings umgewandelt.
Für IPv6 ist long2ip() nicht geeignet — IPv6-Adressen sind 128 Bit. Verwenden Sie stattdessen inet_ntop() / inet_pton(), die sowohl IPv4 als auch IPv6 verarbeiten. Eine Übersicht finden Sie im Kapitel über PHP-Netzwerkfunktionen.
Fazit
long2ip() wandelt einen 32-Bit-Integer zurück in eine menschenlesbare IPv4-Adresse und ist das natürliche Gegenstück zu ip2long(). Kombinieren Sie beide Funktionen, um Adressen kompakt als Integer zu speichern und sie trotzdem als vertraute Punkt-Dezimal-Strings anzuzeigen. Bedenken Sie dabei, dass die Funktion die signierten Integer, die 32-Bit-Systeme manchmal erzeugen, transparent verarbeitet.