Angenommen, es gibt 10 Websites, die an verschiedenen Orten verteilt sind. Ihre Bestände müssen synchronisiert werden, aber die Datenbank unterstützt keine Remoteverbindungen.
Wenn wir das Inventar des Servers in Echtzeit abrufen möchten, können wir viele Methoden verwenden, die ich kenne:
· CURL-Methode
· SOCKET-Methode
· SOAP-Methode in PHP5
Beispiele für die Implementierung:
CURL-Methode
-Client .php
<?php
$psecode = 'NDE005';
$website = 'www.abc.com';
$amt = 1;
$pwd = 123456;
$ch = curl_init();
$curl_url = " http://ics1.server.com/index.php?web = " .
"&pwd=" . $pwd .
"&amt=" . $amt;
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//Nicht direkt ausgeben, zur Variablen zurückkehren
$curl_result = curl_exec($ch);
$result = explosion(',', $curl_result);
curl_close($ch);
print_r($result);
?>
Der Server muss nur in einem bestimmten Format ausgeben, und dann kann der Client in diesem Format empfangen, z. B.:
echo „OK“, „$fbalance“ ;//Getrennte Kommas im
SOCKET-Modus
. Dies erfordert die Hilfe von HttpClient, der Klassenbibliothek eines Drittanbieters, die hier heruntergeladen werden kann: http://scripts.incutio.com/httpclient/
<?php
require_once 'class/HttpClient.php';
$params = array('web' => 'www.abc.com',
'pwd' => '123456',
'action' => 'check',
'pseid' => 'NDE005',
'amt' => 1);
$pageContents = HttpClient::quickPost('http://ics.server.com/index.php', $params);
$result = explosion(',', $pageContents);
print_r($result);
?>
SOAP-Modus in PHP5
server.php
<?php
Funktion getQuote($fpsecode) {
global $dbh;
$result = array();
versuchen {
$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('fprice', $fprice);
$stmt->bindColumn('fcansale', $fcansale);
$stmt->bindColumn('fbalance', $fbalance);
$stmt->bindColumn('fbaltip', $fbaltip);
while($row = $stmt->fetch(PDO_FETCH_BOUND)) {
//
}
} Catch (PDOException $e) {
echo $e->getMessage();
}
return $fprice; //Sie können ein Array zurückgeben
}
$dsn = 'pgsql:host=192.168.*.* port=5432 dbname=db user=123456 passwort=123456';
versuchen {
$dbh = neues PDO($dsn);
} Catch (PDOException $e) {
die('Verbindung fehlgeschlagen: ' . $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // WSDL-Cache deaktivieren
$server = new SoapServer("stockquote.wsdl"); //Konfigurationsdatei
$server->addFunction("getQuote");
$server->handle();
?>
stockquote.wsdl
<?xml version ='1.0'kodierung ='UTF-8' ?>
<definitions name='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/'>
<message name='getQuoteRequest'>
<part name='symbol' type='xsd:string'/>
</Nachricht>
<message name='getQuoteResponse'>
<part name='Result' type='xsd:float'/>
</message>
<portType name='StockQuotePortType'>
<Operationsname='getQuote'>
<input message='tns:getQuoteRequest'/>
<output message='tns:getQuoteResponse'/>
</Betrieb>
</portType>
<binding name='StockQuoteBinding' type='tns:StockQuotePortType'>
<soap:binding style='rpc'
transport='http://schemas.xmlsoap.org/soap/http'/>
<Operationsname='getQuote'>
<soap:operation SoapAction='urn:xmethods-delayed-quotes#getQuote'/>
<Eingabe>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
EncodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</Eingabe>
<Ausgabe>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
EncodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</Ausgabe>
</Betrieb>
</binding>
<service name='StockQuoteService'>
<Portname='StockQuotePort' binding='StockQuoteBinding'>
<soap:address location='http://192.168.3.9/php5/server.php'/>
</Port>
</Dienstleistung>
</definitions>
client.php
<?php
$client = new SoapClient("stockquote.wsdl");
$result = $client->getQuote("nde005");
print_r($result);
?>