Forum und email

fsockopen

(PHP 4, PHP 5)

fsockopen — Abrir una conexión de sockets de dominio de Internet o Unix

Descripción

resource fsockopen ( string $nombre_host [, int $puerto [, int &$errno [, string &$errstr [, float $tiempo_espera ]]]] )

Inicia una conexión a través de sockets con el recurso especificado por nombre_host .

PHP soporta el uso de destinos en los dominios de Internet y Unix, tal y como se describe en Lista de Transportes de Sockets Soportados. Una lista de transportes soportados puede recuperarse usando stream_get_transports().

El socket será abierto por omisión en modo de bloqueo. Es posible cambiar a modo de no-bloqueo usando stream_set_blocking().

Lista de parámetros

nombre_host

Si ha compilado el soporte para OpenSSL, usted puede usar un prefijo sobre el nombre_host , ya sea 'ssl://' o 'tls://' para usar una conexión de cliente SSL o TLS sobre TCP/IP para conectarse con el host remoto.

puerto

El número de puerto.

errno

Si se provee, conserva el número de error de nivel de sistema que haya ocurrido en la llamada de sistema connect().

Si el valor devuelto en errno es 0 y la función devolvió FALSE, es un indicio de que el error ocurrió antes de la llamada a connect(). Lo más probable es que esto se deba a un problema con la inicialización del socket.

errstr

El mensaje de error como una cadena.

tiempo_espera

El tiempo de espera de la conexión, en segundos.

Note: Si necesita establecer un tiempo de espera para la lectura/escritura de datos a través del socket, use stream_set_timeout(), dado que el parámetro tiempo_espera de fsockopen() sólo se aplica cuando se conecta con el socket.

Valores retornados

fsockopen() devuelve un apuntador de archivo el cual puede ser usado junto con otras funciones de archivos (como fgets(), fgetss(), fwrite(), fclose(), y feof()). Si la llamada falla, devolverá FALSE.

Registro de cambios

Versión Descripción
4.3.0 Se agregó el soporte para el parámetro tiempo_espera en win32.
4.3.0 Se agregó el soporte para SSL y TLS sobre TCP/IP.
4.0.0 Se agregó el soporte UDP.
3.0.9 Se agregó el parámetro tiempo_espera .

Ejemplos

Example#1 Ejemplo de fsockopen()

<?php
$da 
fsockopen("www.example.com"80$errno$errstr30);
if (!
$da) {
    echo 
"$errstr ($errno)<br />\n";
} else {
    
$salida "GET / HTTP/1.1\r\n";
    
$salida .= "Host: www.example.com\r\n";
    
$salida .= "Connection: Close\r\n\r\n";

    
fwrite($da$salida);
    while (!
feof($da)) {
        echo 
fgets($da128);
    }
    
fclose($da);
}
?>

Example#2 Uso de conexión UDP

El ejemplo a continuación presenta la forma de recuperar la fecha y hora desde el servicio UDP "daytime" (puerto 13) en su propia máquina.

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

Notes

Note: Dependiendo del entorno, el dominio Unix o el tiempo de espera de conexión opcional pueden no estar disponibles.

Warning

En ocasiones, los sockets UDP parecerán haber sido abiertos sin errores, incluso si el host remoto no puede ser contactado. El error sólo se percibirá cuando lea o escriba datos hacia/desde el socket. La razón es que UDP es un protocolo "sin conexión", lo que quiere decir que el sistema operativo no intenta establecer un enlace con el socket hasta que necesite realmente enviar o recibir datos.

Note: Cuando se especifique una dirección numérica IPv6 (p.ej. fe80::1) se debe incluir la IP entre corchetes. Por ejemplo tcp://[fe80::1]:80.