W3docs

Funzione PHP ip2long(): Tutto Quello che Devi Sapere

Come sviluppatore PHP, potresti dover convertire un indirizzo IP in un intero long. La funzione ip2long() è una funzione integrata in PHP.

Come sviluppatore PHP, potresti dover convertire un indirizzo IP da un formato leggibile dall'uomo a un intero long. La funzione ip2long() è una funzione PHP integrata che esegue questa conversione. Questo articolo ne illustra la sintassi, l'utilizzo e le avvertenze importanti.

Cos'è la Funzione ip2long()?

La funzione ip2long() converte una stringa di indirizzo IPv4 standard (notazione dotted-quad, come 192.168.0.1) nel corrispondente intero a 32 bit.

Un indirizzo IPv4 è composto da quattro byte. ip2long() comprime questi quattro byte in un singolo numero: il primo ottetto diventa il byte più significativo, l'ultimo il meno significativo. Quindi 127.0.0.1 diventa 127 × 256³ + 0 × 256² + 0 × 256 + 1 = 2130706433.

Perché convertire un IP in un intero?

Memorizzare gli indirizzi IP come interi anziché come stringhe offre vantaggi concreti:

  • Minore spazio di archiviazione: una colonna INT UNSIGNED occupa 4 byte rispetto a un massimo di 15 caratteri per la forma stringa.
  • Confronti e query su intervalli più veloci: verificare se un IP rientra in un intervallo CIDR diventa semplice aritmetica intera (WHERE ip BETWEEN :start AND :end).
  • Indicizzazione: gli indici sugli interi sono più compatti e veloci rispetto a quelli sulle stringhe.

Se hai solo bisogno di visualizzare l'indirizzo, mantienilo come stringa. La forma intera è vantaggiosa quando si memorizzano, ordinano o confrontano molti indirizzi su un intervallo.

Come Usare la Funzione ip2long()

L'utilizzo della funzione ip2long() è semplice. Ecco la sintassi:

La sintassi PHP della Funzione ip2long()

ip2long($ip_address);

La funzione accetta un parametro:

  • $ip_address: L'indirizzo IP da convertire in un intero long.

Ecco un esempio di utilizzo della funzione ip2long() con una corretta validazione e formattazione senza segno:

Come Usare la Funzione ip2long()?

php— editable, runs on the server

In questo esempio, convertiamo l'indirizzo IP "127.0.0.1" in un intero long. Verifichiamo se il risultato è false (che indica un input non valido) e utilizziamo sprintf('%u', ...) per mostrare il valore come intero senza segno.

Conversione inversa: ip2long() e long2ip()

ip2long() ha una funzione speculare, long2ip(), che trasforma l'intero nuovamente in una stringa separata da punti. Insieme consentono un ciclo completo:

<?php

$ip = "192.168.1.1";

$int = ip2long($ip);              // signed 32-bit value
$stored = sprintf('%u', $int);    // unsigned string for storage: 3232235777

echo $stored . "\n";              // 3232235777
echo long2ip($int) . "\n";        // 192.168.1.1

Nota che long2ip() accetta direttamente il valore con segno restituito da ip2long(), quindi non è necessario riconvertire la forma senza segno prima di chiamarla.

Note Importanti

  • Output senza segno: ip2long() restituisce un intero con segno a 32 bit. Per indirizzi IP nell'intervallo superiore (ad esempio 192.168.1.1), può restituire un numero negativo. Usa sempre sprintf('%u', ip2long($ip)) quando memorizzi o visualizzi il risultato.
  • Supporto IPv6: ip2long() supporta solo gli indirizzi IPv4. Per IPv6, usa invece la funzione inet_pton().

Conclusione

La funzione ip2long() offre un modo semplice per convertire gli indirizzi IPv4 in interi per la memorizzazione o il confronto. Ricorda di validare il valore restituito e di utilizzare sprintf('%u', ...) per un output senza segno coerente. Speriamo che questa guida ti aiuti a implementare efficacemente la conversione degli indirizzi IP nelle tue applicazioni PHP.

Practice

Pratica
Cosa fa la funzione PHP 'ip2long'?
Cosa fa la funzione PHP 'ip2long'?
Was this page helpful?