Ce face inet_pton / inet_ntop
inet_pton primește o adresă scrisă ca text și returnează octeții ei: 4 pentru IPv4, 16 pentru IPv6. Forma binară se salvează compact în baza de date (coloană VARBINARY(16)) și poate fi comparată direct.
inet_ntop face transformarea inversă și scrie adresa IPv6 în forma ei scurtă: 2001:0db8:0000:...:0001 devine 2001:db8::1. Spre deosebire de ip2long, ambele funcții lucrează și cu IPv6.
Parametri
| Parametru | Descriere |
|---|---|
$ip |
Adresa ca text. La inet_ntop: adresa binară, de 4 sau 16 octeți. |
Ce returnează
Adresa în formă binară (sau text, la inet_ntop) ori false dacă adresa este invalidă.
Exemple
Exemplul 1: IPv4 și IPv6 în binar
Octeții nu se pot afișa direct, așa că îi arătăm în hexazecimal cu bin2hex.
<?php
$v4 = inet_pton("192.168.1.10");
$v6 = inet_pton("2001:db8::1");
echo bin2hex($v4) . " (" . strlen($v4) . " octeți)\n";
echo bin2hex($v6) . " (" . strlen($v6) . " octeți)\n";
Rezultat
c0a8010a (4 octeți)
20010db8000000000000000000000001 (16 octeți)
Exemplul 2: Forma scurtă a unei adrese IPv6
Dus și întors prin binar, orice adresă ajunge la aceeași formă. Așa compari corect două adrese IPv6 scrise diferit.
<?php
function normalizeaza(string $ip): string|false
{
$binar = inet_pton($ip);
return $binar === false ? false : inet_ntop($binar);
}
var_dump(normalizeaza("2001:0db8:0000:0000:0000:0000:0000:0001"));
var_dump(normalizeaza("2001:DB8::1") === normalizeaza("2001:db8:0::1"));
var_dump(normalizeaza("192.168.1.300"));
Rezultat
string(11) "2001:db8::1"
bool(true)
bool(false)
Greșeli frecvente
- Salvezi rezultatul în baza de date într-o coloană
VARCHARcu set de caractere UTF-8. Octeții binari se strică. FoloseșteVARBINARY(16). - Afișezi rezultatul lui
inet_ptoncuecho. Apar caractere ciudate; pentru afișare foloseșteinet_ntopsaubin2hex.
Comenzi înrudite
ip2long / long2ip: Transformă o adresă IPv4 în număr întreg (ip2long) și înapoi (long2ip).bin2hex / hex2bin: bin2hex transformă un text (sau date binare) în cifre hexazecimale, iar hex2bin face inversul.filter_var: Validează sau curăță o valoare: email, număr întreg, URL, adresă IP, valoare booleană.