Ce face ip2long / long2ip
O adresă IPv4 ca 192.168.1.10 este de fapt un număr pe 32 de biți. ip2long îți dă acel număr, iar long2ip face transformarea inversă. Ca număr, adresa ocupă mai puțin loc în baza de date și poate fi comparată ușor, de exemplu ca să afli dacă face parte dintr-o rețea.
Pentru o adresă invalidă, ip2long returnează false. Funcțiile lucrează doar cu IPv4. Pentru IPv6 există inet_pton și inet_ntop.
Parametri
| Parametru | Descriere |
|---|---|
$ip |
Adresa IPv4, în forma obișnuită cu patru numere. |
Ce returnează
ip2long: numărul sau false pentru o adresă invalidă. long2ip: adresa ca text.
Exemple
Exemplul 1: În ambele sensuri
<?php
$numar = ip2long("192.168.1.10");
var_dump($numar);
var_dump(long2ip($numar));
Rezultat
int(3232235786)
string(12) "192.168.1.10"
Exemplul 2: Adresa face parte dintr-o rețea?
Rețeaua 192.168.1.0/24 înseamnă că primii 24 de biți trebuie să fie aceiași. Masca păstrează doar acei biți.
<?php
function in_retea(string $ip, string $retea, int $biti): bool
{
$masca = -1 << (32 - $biti);
return (ip2long($ip) & $masca) === (ip2long($retea) & $masca);
}
var_dump(in_retea("192.168.1.57", "192.168.1.0", 24));
var_dump(in_retea("192.168.2.57", "192.168.1.0", 24));
Rezultat
bool(true)
bool(false)
Exemplul 3: Adrese invalide
<?php
foreach (["10.0.0.1", "10.0.0.256", "192.168.1", "abc"] as $ip) {
echo $ip . ": " . (ip2long($ip) === false ? "invalidă" : "validă") . "\n";
}
Rezultat
10.0.0.1: validă
10.0.0.256: invalidă
192.168.1: invalidă
abc: invalidă
Greșeli frecvente
- Verifici cu
if (!ip2long($ip)). Adresa0.0.0.0devine 0, care e considerat fals. Compară cu=== falsesau foloseștefilter_var($ip, FILTER_VALIDATE_IP). - Încerci să transformi o adresă IPv6.
ip2longreturneazăfalse: foloseșteinet_pton.
Comenzi înrudite
gethostbyname: Află adresa IPv4 a unui domeniu, de exemplu adresa IP din spatele unui site.filter_var: Validează sau curăță o valoare: email, număr întreg, URL, adresă IP, valoare booleană.