W3docs

Funciones de red en PHP

Las funciones de red de PHP permiten resolver nombres de host, abrir sockets, trabajar con IP y comunicarse con otros servidores sin librerías externas.

La conectividad de red es el corazón de la mayoría de las aplicaciones web: resolver nombres de host, abrir sockets, comunicarse con otros servidores y validar direcciones IP. PHP incluye un conjunto de funciones de red integradas que te permiten hacer todo esto sin bibliotecas externas. Este capítulo explica qué son esas funciones, cuándo utilizarlas y cómo usarlas correctamente con ejemplos ejecutables.

¿Qué son las funciones de red de PHP?

Las funciones de red de PHP son funciones integradas que permiten a tu script comunicarse a través de una red. Con ellas puedes:

  • Resolver nombres — convertir un nombre de host como www.example.com en una dirección IP (y viceversa).
  • Abrir conexiones — crear un socket TCP/UDP hacia otro servidor e intercambiar bytes sin procesar.
  • Leer y escribir streams — enviar una solicitud y leer la respuesta.
  • Trabajar con direcciones IP — convertir entre cadenas legibles por humanos y forma binaria compacta, tanto para IPv4 como para IPv6.

Como forman parte del núcleo de PHP, no se requiere pecl install ni ningún paquete de Composer — las funciones siguientes están siempre disponibles.

Funciones de DNS y búsqueda de host

Antes de conectarte a un servidor normalmente necesitas su dirección IP. Estas funciones gestionan la resolución de nombres.

FunciónQué hace
gethostbyname()Devuelve la dirección IPv4 para un nombre de host.
gethostbyaddr()Devuelve el nombre de host para una dirección IP (búsqueda inversa).
gethostbynamel()Devuelve una lista de todas las direcciones IPv4 para un nombre de host.
checkdnsrr()Comprueba si existen registros DNS (A, MX, etc.) para un host.
dns_get_record()Obtiene los registros DNS completos para un host.

Una combinación habitual es gethostbyname() para obtener una IP y checkdnsrr() para verificar que un host tiene registros DNS — eso es exactamente lo que pregunta la práctica a continuación.

<?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";

Si no se puede resolver un nombre, gethostbyname() devuelve la cadena de entrada sin cambios en lugar de lanzar un error — compara siempre el resultado con el original antes de confiar en él.

Funciones de conexión por socket

Cuando necesitas una conexión directa con otro servidor, abre un stream socket. La función moderna y recomendada es stream_socket_client(); la antigua fsockopen() sigue funcionando, pero la API de streams es más flexible.

FunciónPara qué usarla
stream_socket_client()Abrir una conexión de cliente (recomendada).
stream_socket_server()Escuchar conexiones entrantes (construir un servidor).
pfsockopen()Abrir un socket persistente que sobrevive entre solicitudes.
fsockopen()Forma antigua de abrir un socket; prefiere la versión de stream.

A continuación se muestra una solicitud HTTP mínima hecha a mano a través de un 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);
}

Este código abre una conexión TCP al puerto 80, envía una solicitud GET en bruto e imprime la respuesta del servidor. En el trabajo real con HTTP raramente escribirás solicitudes a mano — consulta file_get_contents() para lecturas simples, o usa cURL / Guzzle para cabeceras, redirecciones y HTTPS.

Funciones de E/S de stream

Una vez que un socket (o cualquier stream) está abierto, estas funciones leen y escriben los bytes que fluyen a través de él. Son las mismas funciones que se usan para el manejo de archivos, porque PHP trata los sockets y los archivos como streams.

  • fgets() — leer una línea.
  • fgetc() — leer un carácter.
  • fread() — leer un número fijo de bytes.
  • fwrite() — escribir datos en el stream.
  • feof() — comprobar si se ha alcanzado el final del stream.

Funciones de conversión de direcciones IP

Estas funciones convierten entre la forma de cadena con puntos/dos puntos de una IP y su representación binaria compacta. Son esenciales cuando se almacenan direcciones de forma compacta o se comparan.

FunciónDirecciónFamilia
inet_pton()cadena → binario compactoIPv4 e IPv6
inet_ntop()binario compacto → cadenaIPv4 e IPv6
ip2long()cadena IPv4 → enteroSolo IPv4
long2ip()entero → cadena 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() funcionan tanto para IPv4 como para IPv6, mientras que ip2long() / long2ip() son solo para IPv4. Prefiere el par inet_* cuando tu código deba manejar IPv6.

Validar direcciones IP

Para comprobar si una cadena es una IP válida — por ejemplo, una entrada de usuario — usa filter_var() en lugar de una expresión regular escrita 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";
}

Esto valida IPv4 e IPv6 en una sola llamada; añade FILTER_FLAG_IPV4 o FILTER_FLAG_IPV6 para restringir la familia.

¿Cuándo debes usar estas funciones?

  • Protocolos de bajo nivel — construir un cliente SMTP, FTP o TCP personalizado donde controlas los bytes en la red.
  • Comprobaciones de salud de servicios — verificar que un host se resuelve (checkdnsrr()) o que un puerto es accesible (stream_socket_client() con un tiempo de espera corto).
  • Almacenar datos de IP — empaquetar direcciones con inet_pton() o ip2long() para ahorrar espacio y habilitar consultas de rango.
  • Para llamadas ordinarias a API HTTP, prefiere cURL o una biblioteca cliente; las funciones de socket son para cuando necesitas un control más fino del que estas ofrecen.

Conclusión

Las funciones de red de PHP te ofrecen todo, desde consultas DNS hasta sockets en bruto y conversión de IP, todo sin dependencias externas. Recuerda los tres grupos: resolver un host (gethostbyname(), checkdnsrr()), conectarte a él (stream_socket_client()), y leer/escribir el stream (fgets(), fwrite()). Para trabajo de nivel más alto, apóyate en cURL y Guzzle, y recurre a estas funciones solo cuando necesites un control más bajo.

Práctica

Práctica
¿Qué funciones se usan en PHP para obtener la IP de red y verificar la IP de red, respectivamente?
¿Qué funciones se usan en PHP para obtener la IP de red y verificar la IP de red, respectivamente?
Was this page helpful?