NOTÍCIA

Introdução a Sockets

É através de sockets que podemos estabelecer
comunicações com servidores enviando e recebendo dados,
e como de costume, precisamos enviar informações as
quais o protocolo usado possa entender e efetuar suas
ações. Nesta parte não entraremos muito a fundo. Mas
ótimos tutorias podem ser encontrados em www.faqs.org.

Vamos elaborar um script que nos retorne
o conteúdo de uma página (usando o protocolo HTTP) e
o cabeçalho que o servidor nos envia.

Para começarmos precisamos criar um
identificador com o qual faremos trabalhar as demais
funções relacionadas, seria algo como iniciar uma conexão
com um banco de dados↳Banco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data → qualquer ou iniciar algum trabalho
com arquivos, criamos esse identificador com a função
fsockopen. Exemplo:

<?
$sock = fsockopen(“localhost”,80,$errorno,$error,30);
?>

Bom você deve ter percebido mas é bom
comentar que na função fsockopen
recebeu cinco parâmetros, sendo que apenas o dois primeiros
seriam necessários, estudemo-los então:

  1. O servidor a ser estabelecida a conexão
    (ex. www.suapagina.com.br)

  2. A porta que será usada à conexão (normalmente
    em HTTP usa-se a porta 80)

  3. A variável que receberá o número do
    erro (se houver)

  4. Uma variável que receberá a descrição
    do erro (se houver)

  5. O tempo limite à espera da conexão
    (timeout)

Podemos usar as variáveis de erro
da seguinte maneira:

<?
$sock = fsockopen(“localhost”,8000,$errorno,$error,30);
if(!$sock){
echo “Houve um erro: $error ($errorno)”;
}
?>

Se você já sabe usar as funções relacionadas
a arquivos ficará feliz em saber que os passos que seguirão
serão efetuados da mesma maneira.
O envio de dados é realizado com funções de escrita
em arquivos e a leitura da resposta do servidor é realizada
com as funções de leitura. Nesse ponto do tutorial é
bom você saber como fazer um requisição simples sob
o protocolo HTTP. Como foi relatado no início do tutorial,
essa parte não será estuda com detalhes, apenas superficialmente:

<?
$requisicao =
“GET /arquivo.txt HTTP/1.0

“;
?>

Onde /arquivo.txt
é o arquivo que você deseja do servidor, podendo ser
apenas / o que resultará na página incial do site.
Após a elaboração da string de requisição devemos envia-la
ao servidor. Podemos fazê-lo com as funções fwrite
ou fputs. Usemos
a função fwrite que me
é comum:

<?
fwrite($sock,$requisicao);
?>

Após enviar a requisição do arquivo
o servidor enviará uma respota, que pode ser o arquivo
requerido ou alguma mensagem de erro, podemos lê-la
com algum função de leitura de arquivo, usemos a função
fgets:

<?
$resultado = fgets($sock,255);
while(!feof($sock)){
$resultado .= fgets($sock,255);
}
?>

Se você mandasse imprimir a variável
resultado veria algumas
informação que não fazem parte do corpo do documento,
esse é um outro ponto que devemos destacar, o servidor
lhe enviára um cabeçalho (informação como cookies, data
de expiração e etc…) e após um sequencia de strings
que em PHP↳PHP44 conteúdosPadronizando seu código com PHP CS FixerDev (Back & Front) · mai 2019Docker de imagem. Para rodar projetos PHP em menos de 30 segundosDev (Back & Front) · jan 2026PHP 7.3: conheça as novidades desta versãoDev (Back & Front) · abr 2019Ver tudo em Dev (Back & Front) → representaríamos como rnrn
o corpo da página, então nesse casa para separarmos
esses dados podemos fazer uso da função split
– que tem como objetivo retornar um array separando
uma string por um delimitador informado – exemplo:

<?
$partes = split(”

“,$resultado,2);
$header = $partes[0];
$body = $partes[1];
?>

Agora que já realizamos o que
queríamos podemos (e devemos) liberar o identificador
criado com a função fsockopen,
procederemos da mesma maneira ao fecharmos um arquivo:

<?
fclose($sock);
?>


O script completo pode ser escrito com as seguintes
linhas de código:

<?
$sock = fsockopen(“localhost”,80,$errorno,$error,30);
$requisicao = “GET / HTTP/1.0

“;
fwrite($sock,$requisicao);
$resultado = fgets(
$sock,255);
while(!feof($sock)){
$resultado .= fgets($sock,255);
}
$partes = split(”

“,$resultado,2);
$header = 
$partes[0];
$body = $partes[1];
echo $header;
fclose($sock);
?>

Matérias especiais e reportagens conduzidas internamente pela Redação iMasters. Acompanhe no Twitter @imasters e no Instagram/Threads @portalimasters

Mais de Redação iMasters
Ver perfil →