stream_socket_client
(PHP 5, PHP 7, PHP 8)
stream_socket_client — Abre conexão de socket de domínio Internet ou Unix
Descrição
string
$address
,int
&$error_code
= null
,string
&$error_message
= null
,?float
$timeout
= null
,int
$flags
= STREAM_CLIENT_CONNECT
,?resource
$context
= null
): resource|false
Inicia uma conexão de fluxo ou datagrada ao destino especificado pelo parâmetro
address
. O tipo de socket criado
é determinado pelo transporte especificado usando-se formatação de URL padrão:
transporte://alvo
. Para sockets de domínio Internet
(AF_INET) tais como TCP e UDP, a porção alvo
do parâmetro address
deve consistir de um
nome de servidor ou endereço IP seguido por dois-pontos e um número de porta. Para sockets
de domínio Unix, a porção alvo
seve apontar
ao arquivo de socket no sistema de arquivos.
Note:
O fluxo por padrão será aberto em modo de bloqueio. Pode-se trocar para modo de não-bloqueio usando stream_set_blocking().
Parâmetros
address
-
Endereço ao qual o socket deve se conectar.
error_code
-
Será definido para o número de erro no nível do sistema se a conexão falhar.
error_message
-
Será definido para a mensagem de erro no nível do sistema se a conexão falhar.
timeout
-
Número máximo de segundos que a chamada de sistema
connect()
deve esperar. Por padrão, default_socket_timeout é usado.Note: Este parâmetro aplica-se somente quando não há tentativas de se fazer conexões assíncronas.
Note:
Para definir um limite de tempo para leitura/escrita de dados no socket, use a função stream_set_timeout(), já que
timeout
se aplica somente enquanto está sendo feita a conexão ao socket. flags
-
Um campo de máscara de bits que pode ser configurada para qualquer combinação de opções de conexão. Atualmente a seleção de opções de conecão está limitada a
STREAM_CLIENT_CONNECT
(padrão),STREAM_CLIENT_ASYNC_CONNECT
eSTREAM_CLIENT_PERSISTENT
. context
-
Um recurso válido de contexto criado com stream_context_create().
Valor Retornado
Em caso de sucesso, um recurso de fluxo é retornado, e pode
ser usado com outras funções de arquivos (como
fgets(), fgetss(),
fwrite(), fclose() e
feof()), false
em caso de falha.
Erros/Exceções
Em caso de falha, os argumentos error_code
e
error_message
serão preenchidos com o erro real no
que ocorreu na chamada no nível de sistema a
connect()
. Se o valor retornado em
error_code
for 0
e a
função retornar false
, é uma indicação que o erro
ocorreu antes da chamada a connect()
. Isto é mais provavelmente
devido a um problema na inicialização do socket. Note que os argumentos
error_code
e
error_message
serão sempre passados por
referência.
Registro de Alterações
Versão | Descrição |
---|---|
8.0.0 |
timeout e context agora podem ser nulos.
|
Exemplos
Example #1 Exemplo de 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);
}
?>
Example #2 Usando conexão UDP
Obtendo dia e horário do serviço UDP "daytime" (porta 13) no servidor local.
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr);
if (!$fp) {
echo "ERRO: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
Notas
Sockets UDP algumas vezes irão aparentar ter sido abertos sem erro, mesmo se o servidor remoto não puder ser contactado. O erro só ficará aparente quando for realizada leitura/escrita no socket. A razão para isto é porque o UDP é um protocolo "sem conexão", o que significa que o sistema operacional não tenta estabelecer uma ligação ao socket até que realmente precise enviar ou receber dados.
Note: Ao especificar um endereço IPv6 numérico (por exemplo,
fe80::1
), o IP deve ser colocado entre colchetes — por exemplo,tcp://[fe80::1]:80
.
Note:
Dependendo do ambiente, o domínio Unix ou o limite opcional de tempo de conexão podem não estar disponíveis. Uma lista de transportes disponíveis pode sem obtida usando-se stream_get_transports(). Consulte Lista de Transportes via Socket Suportados para uma lista de transportes incluídos.
Veja Também
- stream_socket_server() - Cria socket de servidor de domínio Internet ou Unix
- stream_set_blocking() - Definir modo de bloqueio/não-bloqueio em um fluxo
- stream_set_timeout() - Define o limite de tempo em um fluxo
- stream_select() - Executa o equivalente à chamada de sistema select() nos arrays de fluxos informados com um limite de tempo especificado por segundos e microssegundos
- fgets() - Lê uma linha de um ponteiro de arquivo
- fgetss() - Ler uma linha de um ponteiro de arquivo e retira as tags HTML
- fwrite() - Escrita binary-safe em arquivos
- fclose() - Fecha um ponteiro de arquivo aberto
- feof() - Testa pelo fim-de-arquivo em um ponteiro de arquivo
- Funções cURL