Suponha que existam 10 sites distribuídos em vários locais. Seus inventários precisam ser sincronizados, mas o banco de dados não suporta conexões remotas.
Se quisermos obter o inventário do servidor em tempo real, podemos usar vários métodos. Os que conheço são os seguintes:
· Método CURL
· Método SOCKET
· Método SOAP em PHP5
Seguem exemplos para implementá-lo:
Método CURL
cliente
..php
<?php
$psecode = 'NDE005';
$site = 'www.abc.com';
$amt = 1;
$pwd = 123456;
$ch = curl_init();
$curl_url = " http://ics1.server.com/index.php?web = " .
"&pwd=" . $pwd . "&action=check&pseid=" .
"&amt=" .
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//Não produz diretamente, retorna à variável
$curl_result = curl_exec($ch);
$resultado = explode(',', $curl_result);
curl_close($ch);
print_r($resultado);
?>
formato
, como:
echo "OK,
" . $fpsecode "," .
Isso requer a ajuda de A biblioteca de classes de terceiros HttpClient pode ser baixada aqui: http://scripts.incutio.com/httpclient/
<?php
require_once 'class/HttpClient.php';
$params = array('web' => 'www.abc.com',
'senha' => '123456',
'ação' => 'verificar',
'pseid' => 'NDE005',
'valor' => 1);
$pageContents = HttpClient::quickPost('http://ics.server.com/index.php', $params);
$resultado = explode(',', $pageContents);
print_r($resultado);
?>
Modo SOAP em PHP5
server.php
<?php
function getQuote($fpsecode) {
$dbh global;
$resultado = array();
tentar {
$query = "SELECT fprice, fcansale, fbalance, fbaltip FROM tblbalance where upper(trim(fpsecode)) = :psecode limit 1";
$stmt = $dbh->prepare($query);
$stmt->execute(array(':psecode' => strtoupper(trim($fpsecode))));
$stmt->bindColumn('fpreço', $fpreço);
$stmt->bindColumn('fcansale', $fcansale);
$stmt->bindColumn('fbalance', $fbalance);
$stmt->bindColumn('fbaltip', $fbaltip);
while($linha = $stmt->fetch(PDO_FETCH_BOUND)) {
//
}
} catch (PDOException $e) {
echo $e->getMessage();
}
return $fprice; //Você pode retornar um array
}
$dsn = 'pgsql:host=192.168.*.* porta=5432 nome do banco de dados=usuário do banco de dados=123456 senha=123456';
tentar {
$dbh = novo DOP($dsn);
} catch (PDOException $e) {
die('Falha na conexão: '. $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // desabilitando o cache WSDL
$server = new SoapServer("stockquote.wsdl"); //Arquivo de configuração
$servidor->addFunction("getQuote");
$servidor->handle();
?>
stockquote.wsdl
<?xml versão ='1.0' codificação ='UTF-8' ?>
<definições nome='StockQuote'
targetNamespace='http://example.org/StockQuote'
xmlns:tns=' http://example.org/StockQuote '
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<nome da mensagem='getQuoteRequest'>
<nome da peça='symbol' type='xsd:string'/>
</mensagem>
<nome da mensagem='getQuoteResponse'>
<nome da parte='Resultado' type='xsd:float'/>
</message>
<portType name='StockQuotePortType'>
<nome da operação='getQuote'>
<mensagem de entrada='tns:getQuoteRequest'/>
<mensagem de saída='tns:getQuoteResponse'/>
</operação>
</portType>
<binding name='StockQuoteBinding' type='tns:StockQuotePortType'>
<soap:binding style='rpc'
transport='http://schemas.xmlsoap.org/soap/http'/>
<nome da operação='getQuote'>
<soap:operação soapAction='urn:xmethods-delayed-quotes#getQuote'/>
<entrada>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</entrada>
<saída>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</saída>
</operação>
</binding>
<nome do serviço='StockQuoteService'>
<nome da porta='StockQuotePort' vinculação='StockQuoteBinding'>
<soap:address location='http://192.168.3.9/php5/server.php'/>
</porta>
</serviço>
</definições>
cliente.php
<?php
$cliente = new SoapClient("stockquote.wsdl");
$resultado = $cliente->getQuote("nde005");
print_r($resultado);
?>