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