Funciones de red
PHP Manual

fsockopen

(PHP 4, PHP 5)

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

Descripción

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

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 no 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.

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.

Historial de cambios

Versión Descripción
4.3.0 Añadido soporte al parámetro timeout en win32.
4.3.0 Añadido soporte a SSL y TLS sobre TCP/IP.

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


Funciones de red
PHP Manual