fsockopen

(PHP 4, PHP 5, PHP 7)

fsockopenAbre una conexión vía sockets a Internet o a un dominio Unix

Descripción

fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] ) : resource

Inicia una conexión vía sockets al recurso especificado por hostname.

PHP soporta objetivos Internet y dominios Unix tal y como se describe en Lista de Transportes de Sockets Soportados. También se puede obtener una lista de los transportes soportados utilizando stream_get_transports().

El socket será abierto por defecto en modo de bloqueo. Es posible cambiarlo a modo de no bloqueo utilizando stream_set_blocking().

La función stream_socket_client() es similar, pero provee un conjunto más amplio de opciones, incluyendo conexión no bloqueante y la posibilidad de proporcionar contexto a una secuencia.

Parámetros

hostname

Si el soporte a OpenSSL está instalado, puedes añadir al principio del hostname tanto ssl:// como tls:// para utilizar una conexión de cliente SSL o TLS sobre TCP/IP para conectar al host remoto.

port

El número de puerto. Se puede omitir con -1 para transportes que no empleen puertos, como unix://.

errno

Si se proporciona, contiene el número de error a nivel de sistema que se ha producido en la llamada a connect() a nivel de sistema.

Si el valor devuelto en errno es 0 y la función devuelve FALSE, esto indica que el error ocurrió antes de la llamada a connect(). Probablemente se deba a un problema al inicializar el socket.

errstr

El mensaje de error como string.

timeout

El tiempo límite de la conexión, en segundos.

Nota:

Si fuera necesario definir un tiempo de límite para leer/escribir datos a través del socket, se deberá utilizar stream_set_timeout(), ya que el parámetro timeout de fsockopen() sólo se aplica al realizar la conexión del socket.

Valores devueltos

fsockopen() devuelve un puntero a fichero que puede ser utilizado junto a otras funciones de fichero (como fgets(), fgetss(), fwrite(), fclose(), y feof()). Si la llamada falla, devolverá FALSE

Errores/Excepciones

Lanza E_WARNING si el hostname no es un dominio válido.

Ejemplos

Ejemplo #1 Ejemplo de fsockopen()

<?php
$fp 
fsockopen("www.example.com"80$errno$errstr30);
if (!
$fp) {
    echo 
"$errstr ($errno)<br />\n";
} else {
    
$out "GET / HTTP/1.1\r\n";
    
$out .= "Host: www.example.com\r\n";
    
$out .= "Connection: Close\r\n\r\n";
    
fwrite($fp$out);
    while (!
feof($fp)) {
        echo 
fgets($fp128);
    }
    
fclose($fp);
}
?>

Ejemplo #2 Utilización de una conexión UDP

El ejemplo inferior muestra cómo obtener el día y la hora del servicio UDP "daytime" (puerto 13) en el servidor local.

<?php
$fp 
fsockopen("udp://127.0.0.1"13$errno$errstr);
if (!
$fp) {
    echo 
"ERROR: $errno - $errstr<br />\n";
} else {
    
fwrite($fp"\n");
    echo 
fread($fp26);
    
fclose($fp);
}
?>

Notas

Nota:

Dependiendo del entorno, el dominio Unix o el tiempo de expiración opcional pueden no estar disponibles.

Advertencia

Los sockets UDP pueden en ocasiones aparecerán como abiertos sin errores, incluso aunque el servidor remoto no esté disponible. El error sólo aparecerá una vez se lean o escriban datos del/al socket. Esto es debido a que UDP es un protoclo "sin conexión", lo que significa que el sistema operativo no trata de establecer un enlace con el socket hasta que realmente necesita enviar o recibir datos.

Nota: Cuando se especifique una dirección numérica IPv6 (por ej., fe80::1), la IP debe ser encerrada entre corchetes — por ejemplo, tcp://[fe80::1]:80.

Ver también

  • pfsockopen() - Abre Internet persistente o conexión de socket de dominio Unix
  • stream_socket_client() - Abrir una conexión de socket de dominio de Internet o Unix
  • stream_set_blocking() - Establecer el modo bloqueo/no-bloqueo en un flujo
  • stream_set_timeout() - Establecer un perido de tiempo de espera en un flujo
  • fgets() - Obtiene una línea desde el puntero a un fichero
  • fgetss() - Obtiene un línea desde un puntero a un archivo y elimina las etiquetas HTML
  • fwrite() - Escritura de un archivo en modo binario seguro
  • fclose() - Cierra un puntero a un archivo abierto
  • feof() - Comprueba si el puntero a un archivo está al final del archivo
  • socket_connect() - Inicia una conexión sobre un socket
  • La extensión Curl