ip2long / long2ip în PHP

Rețea PHP 4+

Transformă o adresă IPv4 în număr întreg (ip2long) și înapoi (long2ip).

Sintaxă
ip2long(string $ip): int|false

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)). Adresa 0.0.0.0 devine 0, care e considerat fals. Compară cu === false sau folosește filter_var($ip, FILTER_VALIDATE_IP).
  • Încerci să transformi o adresă IPv6. ip2long returnează false: folosește inet_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ă.