Programação de Sockets em PHP \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 13 Horas 

 43 Min 

 28 Seg 

   Tempo restante da oferta: 13 43 28 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Programação de Sockets em PHP  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Programação de Sockets em PHP

 Neste artigo veremos uma introdução à programação de sockets com o PHP.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 8 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/11140050/sockets-redes-tcp-udp.png)  

Neste artigo veremos uma introdução à programação de sockets com o PHP. Antes, recomendo que primeiro você leia o artigo [Uma introdução a TCP, UDP e Sockets](https://www.treinaweb.com.br/blog/uma-introducao-a-tcp-udp-e-sockets/) que discorre sobre a base teórica fundamental.

O [PHP](https://www.treinaweb.com.br/blog/o-que-e-php/ "O que é PHP?") dispõe de uma extensão chamada [Sockets](https://www.php.net/manual/pt_BR/book.sockets.php), que foi introduzida ainda no PHP 4 e ela tem uma boa fidelidade em relação à forma como sockets são programados em C, além dela expor a possibilidade de se trabalhar com algumas características do sistema operacional, o que pode ser útil dependendo do que se precisa desenvolver. No entanto, essa extensão nos impõe alguns problemas e dificuldades, o primeiro é que ela não vem instalada por padrão, sendo necessário na compilação do PHP adicionar a flag `-enable-sockets` para ativá-la. Ela também não possui uma boa usabilidade para o desenvolvedor, é uma extensão difícil de usar, de bem mais baixo nível. Além disso, os *resources* abertos por ela só podem ser acessados pelas funções da mesma família, ou seja, as que iniciam pelo nome `socket_` e isso é um fator que limita o desenvolvimento, principalmente porque o PHP dispõe de várias funções para trabalhar com streams como `stream_get_contents()`, `fwrite()`, `fread()` etc, que não podem ser utilizadas junto com as funções da extensão Sockets.

[  ![Drupal - Criação de Sites Avançado](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/drupal-sites.svg)   Curso Drupal - Criação de Sites Avançado Conhecer o curso ](https://www.treinaweb.com.br/curso/drupal-criacao-de-sites-avancado)

Mas a solução para os nossos problemas está na extensão [Stream](https://www.php.net/manual/pt_BR/book.stream.php), nativa do PHP e que já vem habilitada por padrão. Como o próprio nome sugere, essa extensão lida com toda a abstração de I/O (input e output) do PHP e o detalhe mais importante pra nós é que desde o PHP 5 essa extensão nos permite trabalhar com *TCP/IP Sockets* e também com *Unix Sockets*. Os sockets criados usando as funções da extensão Stream (as que iniciam por `stream_socket_`) nos permitem usar as clássicas funções para lidar com arquivos, o que torna o desenvolvimento bem mais intuitivo.

**Leitura recomendada antes de continuar:** [Streams no PHP](https://www.treinaweb.com.br/blog/streams-no-php/ "Streams no PHP").

Em resumo, temos duas formas de trabalhar com Sockets no PHP:

- Usando as funções da extensão **Sockets**, que são funções de mais baixo nível, que nos expõem uma variedade maior de possibilidades ao lidar com algumas características de sockets a nível do sistema operacional, mas que prejudica o desenvolvimento por impor um grau maior de dificuldade;
- Usando as funções da extensão **Stream**, que é uma extensão habilitada por padrão e utilizada por tudo que envolve streams no PHP. Essa extensão expõem funções de mais alto nível, mas ela pode ser um fator limitante se for preciso trabalhar com características de mais baixo nível, mas isso não costuma ser um problema para a grande maioria das aplicações que implementam o uso de sockets.

## Echo Server

O primeiro e mais acessível exemplo que podemos construir para entender como um servidor de socket opera é o de um “Echo Server”, ele basicamente envia de volta tudo o que recebe do cliente. Crie um novo diretório onde normalmente você guarda os seus projetos e então crie um arquivo `index.php` com a seguinte implementação:

```php
