Saltar al contenido

Función fsockopen() de PHP: Todo lo que necesitas saber

Como desarrollador de PHP, es posible que necesites establecer una conexión de red y comunicarte con otro servidor utilizando el protocolo TCP/IP. La función `fsockopen()` se utilizaba históricamente para este propósito. Nota: `fsockopen()` fue deprecada en PHP 8.1 y eliminada en PHP 8.2. Las aplicaciones modernas de PHP deberían usar `stream_socket_client()` o cURL en su lugar. Este artículo explica la función heredada con fines de referencia y migración.

¿Qué es la función fsockopen()?

La función `fsockopen()` abre una conexión de red TCP/IP a un host y puerto especificados, lo que permite enviar y recibir datos mediante punteros de archivo.

Cómo usar la función fsockopen()

Usar la función `fsockopen()` es sencillo. A continuación se muestra la sintaxis:

Sintaxis de PHP

php
fsockopen($hostname, $port, &$errno, &$errstr, $timeout);

La función acepta cinco parámetros:

  • `$hostname`: El nombre del host o la dirección IP del servidor.
  • `$port`: El número de puerto al que conectarse.
  • `&$errno`: Una variable que almacena el número de error, si lo hay.
  • `&$errstr`: Una variable que almacena el mensaje de error, si lo hay.
  • `$timeout`: El tiempo de espera de la conexión en segundos. Si se omite, utiliza por defecto la configuración `ini` `default_socket_timeout`.

Nota: Para conexiones seguras, antepone `ssl://` o `tls://` al nombre del host (por ejemplo, `tls://example.com`).

A continuación se muestra un ejemplo de cómo usar la función `fsockopen()` para establecer una conexión de red con un servidor y enviar/recibir datos:

Ejemplo de uso

php
<?php

$host = "example.com";
$port = 80;
$timeout = 30;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
  echo "Error: $errstr ($errno)<br/>";
} else {
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: $host\r\n";
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  while (!feof($fp)) {
    echo fgets($fp, 128);
  }
  fclose($fp);
}

En este ejemplo, usamos la función `fsockopen()` para establecer una conexión de red con el servidor `example.com` en el puerto 80. Especificamos un tiempo de espera de 30 segundos para la conexión. Si la conexión se establece correctamente, enviamos una solicitud HTTP GET al servidor y recibimos la respuesta utilizando la función `fgets()`.

Nota: Para solicitudes HTTPS, utiliza `tls://` como prefijo de protocolo en la variable `$host`.

Conclusión

Aunque `fsockopen()` proporciona comunicación TCP/IP de bajo nivel, ahora está obsoleta en PHP moderno. Utiliza `stream_socket_client()` o cURL para nuevos proyectos. Esta referencia sigue siendo útil para mantener bases de código heredadas.

Práctica

¿Qué hace la función fsockopen en PHP?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.