W3docs

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 0255), 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          1

Syntax

long2ip(int $ip): string
  • $ip — der 32-Bit-Integer, der die IPv4-Adresse repräsentiert. Es muss ein int sein; die Übergabe eines Strings wirft in PHP 8+ einen TypeError.
  • Rückgabewert — die Adresse als Punkt-Dezimal-string.

Grundlegendes Beispiel

php— editable, runs on the server

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 started

Dieses 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.255

Sie 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- (oder BIGINT-) Spalte ist kleiner und schneller zu indizieren als ein VARCHAR(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.

Übungen

Übung
Was macht die PHP-Funktion long2ip()?
Was macht die PHP-Funktion long2ip()?
Was this page helpful?