W3docs

PHP inet_ntop()-Funktion: Alles, was Sie wissen müssen

Die PHP-Funktion inet_ntop() wandelt eine gepackte binäre IP-Adresse in ein lesbares Format um. Erfahren Sie, wie Sie sie für IPv4 und IPv6 einsetzen.

Die Funktion inet_ntop() wandelt eine gepackte binäre IP-Adresse in eine für Menschen lesbare Zeichenkette um. Der Name steht für „network to presentation" (Netzwerk zur Darstellung): Sie nimmt die kompakte, fest formatierte Form, in der eine IP-Adresse im Speicher (oder in einer Datenbankspalte) vorliegt, und wandelt sie zurück in die punktierte Dezimalschreibweise (127.0.0.1) oder die Doppelpunkt-Hexadezimalschreibweise (::1), die Sie lesen und protokollieren können.

Diese Seite erläutert, was das gepackte Format ist, wie Sie inet_ntop() für IPv4 und IPv6 verwenden, wie es mit inet_pton() zusammenarbeitet, wie Fehler behandelt werden und wann es sinnvoll ist, diese Funktion einzusetzen.

Warum ein „gepacktes" Format existiert

Eine IPv4-Adresse wie 192.168.1.1 besteht letztlich aus 32 Bits — vier Bytes. Eine IPv6-Adresse umfasst 128 Bits — sechzehn Bytes. Der lesbare Text, den Sie normalerweise sehen, ist eine Darstellung dieser Bytes, nicht die Bytes selbst.

Wenn Sie Adressen in großem Maßstab speichern oder vergleichen, sind die rohen Bytes kleiner und schneller: Eine VARBINARY(16)-Spalte nimmt jede IPv4- oder IPv6-Adresse auf, sortiert korrekt und wird gut indiziert. inet_pton() erzeugt diese gepackte Form; inet_ntop() kehrt sie um, damit Menschen sie wieder lesen können.

"127.0.0.1"  --inet_pton()-->  \x7f\x00\x00\x01   (4 packed bytes)
\x7f\x00\x00\x01  --inet_ntop()-->  "127.0.0.1"   (readable text)

Syntax

inet_ntop(string $ip): string|false

Die Funktion nimmt einen einzigen Parameter entgegen:

  • $ip — eine binäre Zeichenkette mit der gepackten In-Adresse. Sie muss für IPv4 genau 4 Bytes oder für IPv6 genau 16 Bytes lang sein.

Sie gibt die Adresse als lesbare Zeichenkette zurück oder false, wenn die Eingabe keine gültige gepackte 4- oder 16-Byte-Adresse ist.

Eine IPv4-Adresse konvertieren

Eine gepackte IPv4-Adresse besteht aus vier rohen Bytes, einem pro Oktett. Die Loopback-Adresse 127.0.0.1 entspricht daher \x7f (127), \x00, \x00, \x01:

php— editable, runs on the server

Das manuelle Schreiben von Escape-Sequenzen ist fehleranfällig. In der Praxis erhalten Sie die gepackten Bytes von inet_pton() oder aus einer Datenbank und übergeben sie direkt an inet_ntop():

<?php

$packed = inet_pton("192.168.1.1"); // text -> 4 packed bytes
echo inet_ntop($packed);            // Outputs: 192.168.1.1

Eine IPv6-Adresse konvertieren

Dieselbe Funktion verarbeitet IPv6 — übergeben Sie ihr eine 16-Byte-gepackte Zeichenkette, und sie gibt die komprimierte Doppelpunkt-Hexadezimalform zurück, wobei aufeinanderfolgende Nullen automatisch zu :: zusammengefasst werden:

<?php

$packed = inet_pton("2001:db8::1");
echo inet_ntop($packed); // Outputs: 2001:db8::1

Da eine einzige Funktion beide Adressfamilien abdeckt, können Sie jede Adresse ohne Verzweigung nach dem Typ hin- und herwandeln — praktisch, wenn eine Spalte beide Arten enthalten kann.

Ungültige Eingaben behandeln

Ist die binäre Zeichenkette nicht genau 4 oder 16 Bytes lang, gibt inet_ntop() false zurück und gibt eine Warnung aus. Prüfen Sie das Ergebnis immer, bevor Sie es verwenden:

<?php

$result = inet_ntop("not a packed address");

if ($result === false) {
    echo "Invalid packed address.";
} else {
    echo $result;
}
// Outputs: Invalid packed address.

Verwenden Sie einen strikten === false-Vergleich: Eine lockere Prüfung würde auch "0.0.0.0" ablehnen, was eine gültige Adresse ist.

inet_ntop() vs. ip2long()

Für IPv4 gibt es auch long2ip(), das einen 32-Bit-Integer zurück in einen punktierten String umwandelt. Der Unterschied:

  • ip2long() / long2ip() arbeiten mit einer Integer-Darstellung und sind nur für IPv4 geeignet.
  • inet_pton() / inet_ntop() arbeiten mit einer binären Zeichenkette und unterstützen sowohl IPv4 als auch IPv6.

Wenn Ihre Anwendung IPv6 verarbeiten muss, bevorzugen Sie das inet_*-Paar, damit ein einzelner Codepfad alle Adressen abdeckt.

Wann man es verwenden sollte

  • Adressen aus dem Speicher auslesen — eine VARBINARY(16)-Spalte speichert jede Adresse kompakt; inet_ntop() rendert Zeilen für die Anzeige oder Protokollierung.
  • Benutzereingaben normalisieren — das Hin- und Herkonvertieren mit inet_pton() und dann inet_ntop() ergibt eine kanonische Form (zum Beispiel wird 2001:0db8::0001 zu 2001:db8::1), sodass gleiche Adressen als gleiche Zeichenketten verglichen werden.
  • Arbeiten mit rohen Socket-Daten — gepackte Adressen, die von Low-Level-Netzwerkaufrufen zurückgegeben werden, werden für Protokolle und Fehlermeldungen lesbar.

Verwandte Funktionen

  • inet_pton() — die Umkehrfunktion: lesbare Adresse zu gepackter binärer Zeichenkette.
  • ip2long() — IPv4-Zeichenkette zu Integer.
  • long2ip() — Integer zurück zu einer IPv4-Zeichenkette.
  • gethostbyname() — einen Hostnamen in seine IPv4-Adresse auflösen.

Fazit

inet_ntop() wandelt eine gepackte 4- oder 16-Byte-IP-Adresse für IPv4 und IPv6 zurück in lesbaren Text und ergänzt damit inet_pton(). Speichern Sie Adressen in ihrer kompakten Binärform für eine effiziente Indizierung, konvertieren Sie sie mit inet_ntop(), wenn Sie sie anzeigen oder protokollieren müssen, und prüfen Sie bei fehlerhafter Eingabe immer auf eine false-Rückgabe.

Übungen

Übung
Was macht die Funktion inet_ntop() in PHP?
Was macht die Funktion inet_ntop() in PHP?
Was this page helpful?