array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'function.stream-socket-recvfrom.php', 1 => 'stream_socket_recvfrom', ), 'up' => array ( 0 => 'ref.stream.php', 1 => 'Funções de Fluxo', ), 'prev' => array ( 0 => 'function.stream-socket-pair.php', 1 => 'stream_socket_pair', ), 'next' => array ( 0 => 'function.stream-socket-sendto.php', 1 => 'stream_socket_sendto', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'reference/stream/functions/stream-socket-recvfrom.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8)
stream_socket_recvfrom — Recebe dados de um socket, conectado ou não
$socket
,$length
,$flags
= 0,&$address
= null
stream_socket_recvfrom() aceita
dados de um socket remoto até a quantidade de bytes definida por length
.
socket
O socket remoto.
length
O número de bytes a receber do socket
.
flags
O valor de flags
pode ser qualquer combinação
das opções a seguir:
STREAM_OOB |
Processa dados fora-de-banda (do inglês OOB out-of-band ).
|
STREAM_PEEK |
Recebe dados do socket, mas não consome o buffer. Chamadas subsequentes a fread() ou stream_socket_recvfrom() irão ver os mesmos dados. |
address
Se address
for fornecido, será preenchido com
o endereço do socket remoto.
Retorna os dados lidos, como uma string, ou false
em caso de falha.
Exemplo #1 Exemplo de stream_socket_recvfrom()
<?php
/* Abre um socket de servidor na porta 1234 no servidor local */
$server = stream_socket_server('tcp://127.0.0.1:1234');
/* Aceita uma conexão */
$socket = stream_socket_accept($server);
/* Pega um pacote (1500 é um tamanho típico de MTU) de dados OOB */
echo "Recebido Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";
/* Dá uma olhada nos dados normais dentro-da-banda, mas não os consome. */
echo "Dados: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";
/* Obtém o mesmo pacote novamente, mas remove-o do buffer desta vez. */
echo "Dados: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
/* Fecha tudo */
fclose($socket);
fclose($server);
?>
Nota:
Se uma mensagem recebida for maior que o parâmetro
length
, os bytes excedentes podem ser descartados dependendo do tipo do socket do qual a mensagem for recebida (como no UDP).
Nota:
Chamadas a stream_socket_recvfrom() em fluxos baseados em socket, depois de chamadas a funções de fluxo baseadas em buffer (como fread() ou stream_get_line()) lêem dados diretamente do socket e ignoram o buffer de fluxo.