W3docs

Comprendere le Funzioni di Rete PHP

Le funzioni di rete PHP consentono di risolvere hostname, aprire socket, comunicare con altri server e validare indirizzi IP senza librerie esterne.

La connettività di rete è al centro della maggior parte delle applicazioni web: risolvere hostname, aprire socket, comunicare con altri server e validare indirizzi IP. PHP include un insieme di funzioni di rete integrate che permettono di fare tutto questo senza librerie esterne. Questo capitolo spiega quali sono queste funzioni, quando utilizzare ciascun gruppo e come usarle correttamente con esempi eseguibili.

Cosa sono le funzioni di rete PHP?

Le funzioni di rete PHP sono funzioni integrate che consentono al tuo script di comunicare attraverso una rete. Con esse puoi:

  • Risolvere nomi — trasformare un hostname come www.example.com in un indirizzo IP (e viceversa).
  • Aprire connessioni — creare un socket TCP/UDP verso un altro server e scambiare byte grezzi.
  • Leggere e scrivere stream — inviare una richiesta e leggere la risposta.
  • Lavorare con indirizzi IP — convertire tra stringhe leggibili dall'uomo e forma binaria compressa, sia per IPv4 che per IPv6.

Poiché fanno parte del core di PHP, non è necessario alcun pecl install o pacchetto Composer — le funzioni seguenti sono sempre disponibili.

Funzioni DNS e di ricerca host

Prima di poter connettersi a un server di solito hai bisogno del suo indirizzo IP. Queste funzioni gestiscono la risoluzione dei nomi.

FunzioneCosa fa
gethostbyname()Restituisce l'indirizzo IPv4 per un hostname.
gethostbyaddr()Restituisce l'hostname per un indirizzo IP (ricerca inversa).
gethostbynamel()Restituisce una lista di tutti gli indirizzi IPv4 per un hostname.
checkdnsrr()Verifica se esistono record DNS (A, MX, ecc.) per un host.
dns_get_record()Recupera i record DNS completi per un host.

Un abbinamento comune è gethostbyname() per ottenere un IP e checkdnsrr() per verificare che un host abbia effettivamente record DNS — è esattamente ciò di cui tratta la domanda di esercitazione qui sotto.

<?php

$host = "localhost";

// Resolve a hostname to its IPv4 address.
$ip = gethostbyname($host);
echo "IP for {$host}: {$ip}\n";

// Reverse lookup: IP back to a hostname.
echo "Host for {$ip}: " . gethostbyaddr($ip) . "\n";

Se un nome non può essere risolto, gethostbyname() restituisce la stringa di input invariata invece di generare un errore — confronta sempre il risultato con l'originale prima di fidarti di esso.

Funzioni di connessione socket

Quando hai bisogno di una connessione grezza verso un altro server, apri uno stream socket. La funzione moderna e raccomandata è stream_socket_client(); il più vecchio fsockopen() funziona ancora ma l'API stream è più flessibile.

FunzioneUsala per
stream_socket_client()Aprire una connessione client (raccomandato).
stream_socket_server()Ascoltare connessioni in entrata (creare un server).
pfsockopen()Aprire un socket persistente che sopravvive tra le richieste.
fsockopen()Modo legacy per aprire un socket; preferire la versione stream.

Ecco una richiesta HTTP minimale eseguita manualmente tramite socket:

<?php

$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);

if (!$fp) {
    echo "Connection failed: {$errstr} ({$errno})\n";
} else {
    $request  = "GET / HTTP/1.1\r\n";
    $request .= "Host: www.example.com\r\n";
    $request .= "Connection: Close\r\n\r\n";

    fwrite($fp, $request);

    while (!feof($fp)) {
        echo fgets($fp, 128); // read the response line by line
    }
    fclose($fp);
}

Questo apre una connessione TCP alla porta 80, invia una richiesta GET grezza e stampa la risposta del server. Per il lavoro HTTP reale raramente si scrivono le richieste a mano — vedi file_get_contents() per letture semplici, oppure usa cURL / Guzzle per header, redirect e HTTPS.

Funzioni I/O per stream

Una volta aperto un socket (o qualsiasi stream), queste funzioni leggono e scrivono i byte che lo attraversano. Sono le stesse funzioni usate per la gestione dei file, perché PHP tratta socket e file come stream.

  • fgets() — legge una riga.
  • fgetc() — legge un carattere.
  • fread() — legge un numero fisso di byte.
  • fwrite() — scrive dati nello stream.
  • feof() — verifica se è stata raggiunta la fine dello stream.

Funzioni di conversione degli indirizzi IP

Queste funzioni convertono tra la forma stringa puntata/con due punti di un IP e la sua rappresentazione binaria compressa. Sono essenziali quando si memorizzano indirizzi in modo compatto o si eseguono confronti.

FunzioneDirezioneFamiglia
inet_pton()stringa → binario compressoIPv4 e IPv6
inet_ntop()binario compresso → stringaIPv4 e IPv6
ip2long()stringa IPv4 → interosolo IPv4
long2ip()intero → stringa IPv4solo IPv4
<?php

$ip = "192.168.1.1";

// Pack the IPv4 string into binary, then expand it back.
$packed = inet_pton($ip);
echo "Round-trip: " . inet_ntop($packed) . "\n";

// ip2long stores an IPv4 address as a single integer (handy for databases).
$long = ip2long($ip);
echo "As integer: {$long}\n";
echo "Back to string: " . long2ip($long) . "\n";

inet_pton() / inet_ntop() funzionano sia per IPv4 che per IPv6, mentre ip2long() / long2ip() sono solo per IPv4. Preferire la coppia inet_* quando il codice deve gestire IPv6.

Validazione degli indirizzi IP

Per verificare se una stringa è un IP valido — ad esempio un input utente — usa filter_var() invece di una regex scritta a mano:

<?php

$candidates = ["192.168.0.1", "999.1.1.1", "::1"];

foreach ($candidates as $value) {
    $valid = filter_var($value, FILTER_VALIDATE_IP) !== false;
    echo $value . " => " . ($valid ? "valid" : "invalid") . "\n";
}

Questo valida IPv4 e IPv6 in una sola chiamata; aggiungi FILTER_FLAG_IPV4 o FILTER_FLAG_IPV6 per limitare la famiglia.

Quando dovresti usare queste funzioni?

  • Protocolli di basso livello — creare un client SMTP, FTP o TCP personalizzato in cui si controllano i byte sul filo.
  • Controlli di salute del servizio — verificare che un host si risolva (checkdnsrr()) o che una porta sia raggiungibile (stream_socket_client() con un timeout breve).
  • Archiviazione dati IP — comprimere indirizzi con inet_pton() o ip2long() per risparmiare spazio e abilitare query per intervalli.
  • Per le normali chiamate API HTTP, preferire cURL o una libreria client; le funzioni socket sono per quando hai bisogno di un controllo più fine di quello che queste offrono.

Conclusione

Le funzioni di rete PHP ti forniscono tutto, dalle ricerche DNS ai socket grezzi fino alla conversione IP, il tutto senza dipendenze esterne. Ricorda i tre gruppi: risolvere un host (gethostbyname(), checkdnsrr()), connettersi ad esso (stream_socket_client()), e leggere/scrivere lo stream (fgets(), fwrite()). Per lavori di livello superiore, affidati a cURL e Guzzle e ricorri a queste funzioni solo quando hai bisogno di un controllo di livello più basso.

Esercitazione

Pratica
Quali funzioni vengono utilizzate in PHP per acquisire l'IP di rete e verificare l'IP di rete, rispettivamente?
Quali funzioni vengono utilizzate in PHP per acquisire l'IP di rete e verificare l'IP di rete, rispettivamente?
Was this page helpful?