fsockopen

(PHP 3, PHP 4, PHP 5)

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

Descripción

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

Inicia una conexión a través de sockets con el recurso especificado por destino. PHP soporta el uso de destinos en los dominios de Internet y Unix, tal y como se describe en Apéndice O. Una lista de transportes soportados puede recuperarse usando stream_get_transports().

Nota: 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.

A partir de PHP 4.3.0, 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.

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, y si los argumentos opcionales errno y errstr están presentes, serán modificados para indicar el error de nivel de sistema real que ocurrió 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. Note que los argumentos errno y errstr siempre serán pasados por referencia.

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

El socket será abierto por defecto en modo de bloqueo. Puede cambiar a modo de no-bloqueo usando stream_set_blocking().

Ejemplo 1. Ejemplo de fsockopen()

<?php
$da
= fsockopen("www.example.com", 80, $errno, $errstr, 30);
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($da, 128);
    }
    
fclose($da);
}
?>
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.

Ejemplo 2. Uso de una conexión UDP

<?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($da, 26);
    
fclose($da);
}
?>

Aviso

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.

Nota: 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.

Nota: El parámetro de tiempo de espera fue introducido en PHP 3.0.9 y el soporte para UDP fue añadido en PHP 4.

Vea también pfsockopen(), stream_set_blocking(), stream_set_timeout(), fgets(), fgetss(), fwrite(), fclose(), feof(), y la extensión Curl.

Hosting by: hurra.com
Generated: 2007-01-26 18:00:58