fsockopen
(PHP 4, PHP 5)
fsockopen — Abre una conexión vía sockets a Internet o a un dominio Unix
Descripción
$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 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
hostnametanto 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
errnoes 0 y la función devuelveFALSE, 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
timeoutde 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, $errstr, 30);
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($fp, 128);
}
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($fp, 26);
fclose($fp);
}
?>
Notas
Nota:
Dependiendo del entorno, el dominio Unix o el tiempo de expiración opcional pueden no estar disponibles.
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