Signatur
Beschreibung
inet_pton() wandelt eine als Zeichenkette vorliegende IPv4- oder IPv6-Adresse in die entsprechende binäre in_addr-Darstellung um. Diese komprimierte, netzwerk-bytegeordnete Binärform wird beispielsweise für den direkten Vergleich von IP-Adressen in Datenbanken oder für Low-Level-Netzwerkoperationen benötigt.
Die Funktion unterstützt sowohl dotted-decimal IPv4-Adressen (192.168.0.1) als auch vollständige und abgekürzte IPv6-Schreibweisen (2001:db8::1). Die zurückgegebene Binärzeichenkette hat für IPv4 eine Länge von 4 Byte und für IPv6 eine Länge von 16 Byte.
Typische Anwendungsfälle sind das Speichern von IP-Adressen in platzsparender Binärform in Datenbanken (z. B. als BINARY(4) oder BINARY(16)), das Sortieren und Vergleichen von IP-Adressen sowie die Prüfung, ob eine Adresse in einem bestimmten Subnetz liegt. Die Umkehroperation übernimmt inet_ntop().
Im Gegensatz zu ip2long() unterstützt inet_pton() auch IPv6-Adressen und ist daher für moderne, dual-stack-fähige Anwendungen die bevorzugte Wahl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ip Pflicht | string | Eine gültige IPv4-Adresse in dotted-decimal-Schreibweise (z. B. 192.0.2.1) oder eine gültige IPv6-Adresse (z. B. 2001:db8::1). |
Rückgabewert
in_addr-Darstellung als Zeichenkette zurück (4 Byte für IPv4, 16 Byte für IPv6). Bei einer ungültigen IP-Adresse wird false zurückgegeben.Beispiele
IPv4-Adresse in Binärform und zurück
<?php
$ip = '192.168.1.100';
$binary = inet_pton($ip);
echo 'Länge: ' . strlen($binary) . ' Byte' . PHP_EOL;
echo 'Hex: ' . bin2hex($binary) . PHP_EOL;
echo 'Zurück: ' . inet_ntop($binary) . PHP_EOL;
IPv6-Adresse in Binärform speichern und vergleichen
<?php
$ipv6 = '2001:db8::1';
$binary = inet_pton($ipv6);
echo 'Länge: ' . strlen($binary) . ' Byte' . PHP_EOL;
echo 'Hex: ' . bin2hex($binary) . PHP_EOL;
echo 'Zurück: ' . inet_ntop($binary) . PHP_EOL;
// Zwei IPv6-Adressen vergleichen (expanded vs. compressed)
$a = inet_pton('2001:0db8:0000:0000:0000:0000:0000:0001');
$b = inet_pton('2001:db8::1');
echo 'Gleich: ' . ($a === $b ? 'Ja' : 'Nein') . PHP_EOL;
IP-Adressen platzsparend in MySQL speichern
<?php
// Setzt eine PDO-Verbindung $pdo voraus
// Tabelle: CREATE TABLE visitors (id INT, ip VARBINARY(16));
$rawIp = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';
$binaryIp = inet_pton($rawIp);
if ($binaryIp === false) {
throw new InvalidArgumentException('Ungültige IP-Adresse');
}
$stmt = $pdo->prepare('INSERT INTO visitors (ip) VALUES (:ip)');
$stmt->execute([':ip' => $binaryIp]);
// Auslesen und zurückkonvertieren
$row = $pdo->query('SELECT ip FROM visitors LIMIT 1')->fetch();
echo inet_ntop($row['ip']);
// Wichtig · Fallstricke
Rückgabewert prüfen: Da false bei ungültiger Eingabe zurückgegeben wird, sollte der Rückgabewert immer mit === false überprüft werden, bevor die Binärzeichenkette weiterverwendet wird.
Portabilität: Die Funktion erfordert, dass die zugrundeliegende C-Bibliothek inet_pton unterstützt. Unter Windows war dies vor PHP 5.3 nicht immer der Fall. Ab PHP 5.3 steht sie plattformübergreifend zur Verfügung.
Kein Hostname-Lookup: inet_pton() akzeptiert ausschließlich numerische IP-Adressen. Hostnamen wie example.com werden nicht aufgelöst — hierfür muss gethostbyname() vorangestellt werden.