Предположим, есть 10 веб-сайтов, разбросанных по разным местам. Их инвентарь необходимо синхронизировать, но база данных не поддерживает удаленные подключения.
Если мы хотим получить инвентаризацию сервера в режиме реального времени, мы можем использовать множество методов. Мне известны следующие:
· Метод CURL
· Метод SOCKET
· Метод SOAP в PHP5.
Ниже приведены примеры его реализации:
Клиент
метода CURL.
.php
<?php
$psecode = 'NDE005';
$вебсайт = 'www.abc.com';
$амт = 1;
$парв = 123456;
$ch = Curl_init();
$curl_url = " http://ics1.server.com/index.php?web = " $website.
"&pwd=" . $pwd "&action=check&pseid=" .
"&амт=" . $амт;
curl_setopt($ch, CURLOPT_URL, $curl_url);
Curl_setopt ($ ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//Не выводить напрямую, возвращаемся в переменную
$curl_result = curl_exec($ch);
$result = взорваться(',', $curl_result);
локон_закрыть ($ ч);
print_r ($ результат);
?>
Серверу необходимо выводить данные только в определенном формате, а затем клиент может получать их в этом формате, например:
echo «OK», $fpsecode «,» $fbalance ;//Раздельные запятые в
режиме SOCKET
. Для этого требуется помощь сторонней библиотеки классов HttpClient, которую можно скачать здесь: http://scripts.incutio.com/httpclient/
<?php
require_once 'класс/HttpClient.php';
$params = array('web' => 'www.abc.com',
'pwd' => '123456',
'действие' => 'проверить',
'псейд' => 'NDE005',
'амт' => 1);
$pageContents = HttpClient::quickPost('http://ics.server.com/index.php', $params);
$result = взорваться(',', $pageContents);
print_r ($ результат);
?>
Режим SOAP в PHP5
server.php
<?php
функция getQuote($fpsecode) {
глобальный $дбх;
$результат = массив();
пытаться {
$query = "ВЫБЕРИТЕ fprice, fcansale, fbalance, fbaltip FROM tblbalance где верхний(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 //Вы можете вернуть массив
}
$dsn = 'pgsql:host=192.168.*.* порт=5432 имя базы данных=пользователь базы данных=123456 пароль=123456';
пытаться {
$dbh = новый PDO($dsn);
} catch (PDOException $e) {
die('Соединение не удалось: ' . $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // отключение WSDL-кеша
$server = новый SoapServer("stockquote.wsdl"); //Файл конфигурации
$server->addFunction("getQuote");
$сервер->обработка();
?>
stockquote.wsdl
<?xml версия ='1.0' кодировка ='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/'>
<имя сообщения='getQuoteRequest'>
<part name='symbol' type='xsd:string'/>
</сообщение>
<имя сообщения='getQuoteResponse'>
<part name='Result' type='xsd:float'/>
</message>
<portType name='StockQuotePortType'>
<имя операции='getQuote'>
<input message='tns:getQuoteRequest'/>
<выходное сообщение='tns:getQuoteResponse'/>
</операция>
</portType>
<binding name='StockQuoteBinding' type='tns:StockQuotePortType'>
<soap:binding style='rpc'
транспорт='http://schemas.xmlsoap.org/soap/http'/>
<имя операции='getQuote'>
<soap:operation мылоAction='urn:xmethods-delayed-quotes#getQuote'/>
<ввод>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
EncodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</вход>
<выход>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
EncodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</выход>
</операция>
</binding>
<service name='StockQuoteService'>
<port name='StockQuotePort' привязка='StockQuoteBinding'>
<soap:address location='http://192.168.3.9/php5/server.php'/>
</порт>
</услуга>
</определения>
client.php
<?php
$client = новый SoapClient("stockquote.wsdl");
$result = $client->getQuote("nde005");
print_r ($ результат);
?>