Conexões TCP/IP com fsockopen
Fonte: www.revistaphp.com.br
Existem várias outras formas de enviar dados para locais externos, por exemplo usando a bibliteca CURL do PHP.Um passo importante é primeiramente ler a documentação do PHP, dê uma olhada na página da função antes de começar:
O cenário que vou mostrar aqui, é real e passei por ele tempos atrás. Portanto é válido 🙂
Situação:
Diariamente uma loja cadastra centenas de clientes novos. Uma vez por dia, o funcionário da loja vai até a intranet local e faz o que ele chama de “sincronizar clientes” com a matriz. Uma vez que o funcionário clique no link, o script realiza um select no banco local, na tabela de clientes, selecionando apenas os que ainda não foram enviados. É aberta uma conexão TCP/IP via fsockopen com o servidor da matriz que fica no mesmo prédio mas em outro andar. Os dados são enviados para este servidor, cujo mesmo possui uma determinada página que recebe tais dados e os cadastra no banco central. Simples não?
O primeiro passo então, é realizar a conexão com o banco, e selecionar os clientes que serão enviados ao local externo.
$conexao = mysql_connect("host", "usuario", "senha");
if (!$conexao) {
die('Não foi possível conectar: ' . mysql_error());
}else{
mysql_select_db('minhabase');
$query = "SELECT nome, endereco, cidade, idade, sexo FROM clientes WHERE status_envio = 'N' ";
$exec = mysql_query($query,$conexao);
$clientes = mysql_fetch_array($exec);
}
Feito isso, temos então temos selecionados os dados dos clientes ainda não sincronizados, e armazenados no array $clientes.
Agora, vamos compor ums série de dados já mastigados para serem enviados via TCP/IP. Assim será mais fácil manipulá-los na hora do envio.
-
$end_servidor = “192.168.1.1”;
-
$porta_servidor = “80”;
-
$url_servico = “/aplicacao/clientes/sincronizar.php”;
Temos acima: o endereço do servidor para onde vamos enviar os dados. A porta que será utilizada na conexão e a url presente neste servidor, que receberá os dados que vamos enviar mais adiante.
Agora vamos recuperar os dados do select feito anteriormente, e montar uma URL para passá-los via GET para a $url_servico, que é a responsável por ler tais dados.
-
$nome_cliente = $clientes[‘nome’];
-
$endereco = $clientes[‘endereco’];
-
$cidade = $clientes[‘cidade’];
-
$idade = $clientes[‘idade’];
-
$sexo = $clientes[‘sexo’];
-
$url_a_enviar = “?acao=sincronizar&nome=$nome_cliente&endereco_cliente=$endereco&cidade=$cidade&idade=$idade&sexo=$sexo”;
Desta forma, já temos a url com os dados que serão enviados. Vamos agora à parte boa da coisa, que é realmente abrir uma conexão TCP/IP e enviar tais dados!
-
//renomeio a varilavel a partir daqui, pra facilitar 😉
-
$req = $url_a_enviar;
-
// lembra da $url_servico criado mais acima? Aqui vai ela, no cabeçalho da conexão TCP/IP
-
// Isso vai informar a conexão o local que queremos conectar.
-
$header .= “POST $url_servico HTTP/1.0rn“;
-
// Estou enviando apenas texto puro, portanto informando isso também no cabeçalho
-
$header .= “Content-Type: text/plainrn“;
-
// Informando o tamanho dos dados da variável $req (antiga $url_a_enviar) que estou enviando
-
// abrindo uma conexão TCP/IP com fsockopen
-
// onde $end_servidor é o local onde vamos conectar
-
// $porta_servidor é a porta por onde a conexão será feita
-
// os demais dados são padrão da conexão e são opcionais. Se informe no manual para mais infos.
Veja que os comentários que coloquei no meio do script, te informam o que é cada coisa neste trecho das configurações do soquete de conexão. Vamos realizar o envio dos dados:
-
// criando um laço para enviar todos os dados até o fim do arquivo
-
}
Não é um bicho de sete cabeças. Uma vez enviado os dados, vamos criar o script que o recebe.
Ah, uma notinha: Todo esse trabalho de script, deve estar dentro daquele else da conexão mysql (ou seja, antes de fechar a chave da linha 9, mostrado no primeiro bloco de código. Depois não vá falar “deu erro”. Leia bem o tutorial antes 😉
-
<?
-
$nome = $_REQUEST[‘nome’];
-
$endereco = $_REQUEST[‘endereco’];
-
$cidade = $_REQUEST[‘cidade’];
-
$idade = $_REQUEST[‘idade’];
-
$sexo = $_REQUEST[‘sexo’];
-
if (!$conexao) {
-
}else{
-
$query2 = “INSERT INTO tab_clientes_loja (nome, endereco, cidade, idade, sexo)
-
VALUES (‘$nome’, ‘$endereco’, ‘$cidade’, ‘$idade’, ‘$sexo’)”;
-
}
-
?>
É um script simples, como você pode notar. Apenas estou resgatando os dados recebidos (como vc viu no penúltimo bloco de código do script de envio, estou enviando via POST, mas você pode enviar via GET, a escolha é sua.
Após o resgate, estou incluindo no banco. Simples assim.
Aí, no caso, ainda tem um update, pra informar a loja, que estes clientes já foram sincronizados. O processo é o mesmo, contudo ao inverso.
Deixe um comentário