PHP 8.5.0 Alpha 1 available for testing

stream_socket_client

(PHP 5, PHP 7, PHP 8)

stream_socket_clientAbre una conexión de socket de Internet o Unix

Descripción

stream_socket_client(
    string $address,
    int &$error_code = null,
    string &$error_message = null,
    ?float $timeout = null,
    int $flags = STREAM_CLIENT_CONNECT,
    ?resource $context = null
): resource|false

Inicia un flujo o una conexión de datagrama con el destino address. El tipo de socket creado se determina por el transporte especificado con el formato URL siguiente: transport://target. Para un socket de Internet, (AF_INET) como TCP y UDP, el objetivo de address será una dirección IP o un nombre de host. Para un socket Unix, el objetivo debe ser un fichero de socket del sistema.

Nota:

El flujo se abrirá por omisión en modo bloqueante. Puede pasarse a modo no bloqueante utilizando la función stream_set_blocking().

Parámetros

address

La dirección del socket.

error_code

Contendrá el número del error del sistema si la conexión falla.

error_message

Contendrá el mensaje del error del sistema si la conexión falla.

timeout

Tiempo límite, en segundos, para la llamada al sistema connect(). Por omisión, se utiliza default_socket_timeout.

Nota: Este parámetro solo se aplica para conexiones que no son asíncronas.

Nota:

Para definir un tiempo límite al leer/escribir datos a través de un socket, utilice la función stream_set_timeout(), ya que el parámetro timeout solo se aplica durante la conexión al socket.

flags

Campo de bits que puede ser la combinación de cualquier opción de conexión. Actualmente, los valores posibles para estas opciones son STREAM_CLIENT_CONNECT (por omisión), STREAM_CLIENT_ASYNC_CONNECT y STREAM_CLIENT_PERSISTENT.

context

Un recurso de contexto válido, creado por la función stream_context_create().

Valores devueltos

En caso de éxito, se devuelve un recurso de flujo, que puede ser utilizado con otras funciones de ficheros, como fgets(), fgetss(), fwrite(), fclose(), y feof(), false si ocurre un error.

Errores/Excepciones

Si la llamada falla, stream_socket_client() devolverá false y si los parámetros opcionales error_code y error_message son proporcionados, recibirán el error exacto que ocurrió en el sistema durante la llamada a connect(). Si el valor devuelto en error_code es 0 y la función ha devuelto false, es una indicación de que el error ocurrió antes de la llamada a connect(). Esto es probablemente debido a un problema de inicialización del socket. Tenga en cuenta que error_code y error_message deben ser pasados por referencia.

Historial de cambios

Versión Descripción
8.0.0 timeout y context ahora pueden ser nulos.

Ejemplos

Ejemplo #1 Ejemplo con stream_socket_client()

<?php
$fp
= stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!
$fp) {
echo
"$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
while (!
feof($fp)) {
echo
fgets($fp, 1024);
}
fclose($fp);
}
?>

Ejemplo #2 Uso de conexiones UDP

Lee la fecha y hora en un servicio UDP de tipo "daytime" (puerto 13) en su propia máquina:

<?php
$fp
= stream_socket_client("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

Advertencia

Los sockets UDP a veces parecerán abrirse sin error, incluso si el host remoto no es accesible. Este error solo se hará aparente cuando se intente leer o escribir datos con este socket. La razón es que UDP es un protocolo sin conexión, lo que significa que el sistema operativo no tiene que establecer un enlace para el socket, hasta que comience a intercambiar 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.

Nota:

Según su entorno, los sockets Unix o el tiempo límite pueden no estar disponibles. Una lista de los transportes disponibles en el sistema es accesible mediante stream_get_transports(). Consulte Lista de los modos de transporte de sockets disponibles para una lista de transportes nativos.

Ver también

add a note

User Contributed Notes 2 notes

up
22
nicholas at nicholaswilliams dot net
16 years ago
For those wanting to use stream_socket_client() to connect to a local UNIX socket who can't find documentation on how to do it, here's a (rough) example:

<?php

$sock
= stream_socket_client('unix:///full/path/to/my/socket.sock', $errno, $errstr);

fwrite($sock, 'SOME COMMAND'."\r\n");

echo
fread($sock, 4096)."\n";

fclose($sock);

?>
up
10
Vasil Rangelov a.k.a. boen_robot
13 years ago
The remote_socket argument, in its end (well... after the port), can also contain a "/" followed by a unique identifier. This is especially useful if you want to create multiple persistent connections to the same transport://host:port combo.

Example:
<?php
$socket
= stream_socket_client('tcp://mysql.example.com:3306/root', $errorno, $errorstr, $timeout, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT);
?>

Note that while (p)fsockopen() follows a similar scheme, it doesn't have this particular feature.
To Top