다양한 위치에 분산된 10개의 웹사이트가 있다고 가정해 보겠습니다. 해당 웹사이트의 인벤토리를 동기화해야 하지만 데이터베이스가 원격 연결을 지원하지 않습니다.
서버의 인벤토리를 실시간으로 얻으려면 다음과 같은 여러 가지 방법을 사용할 수 있습니다.
· CURL 방법
· SOCKET 방법
·
PHP5의 SOAP 방법을
구현하는 방법은 다음과 같습니다
. .php
<?php
$psecode = 'NDE005';
$웹사이트 = 'www.abc.com';
$amt = 1;
$pwd = 123456;
$ch = 컬_초기화();
$curl_url = " http://ics1.server.com/index.php?web = " $웹사이트 .
"&pwd=" . $pwd . "&액션=체크&pseid=" .
"&amt=" .
컬_setopt($ch, CURLOPT_URL, $curl_url);
컬_setopt($ch, CURLOPT_POST, 1);
cur_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//직접 출력하지 않고 변수로 복귀
$curl_result = 컬_exec($ch);
$result = 폭발(',', $curl_result);
컬_닫기($ch);
print_r($결과);
?>
서버는 특정 형식으로만 출력하면 클라이언트는 다음과 같은 형식으로 수신할 수 있습니다.
$fbalance ;//
SOCKET 모드
에서는 쉼표를 구분합니다. 이를 위해서는 타사 클래스 라이브러리 HttpClient의 도움이 필요합니다. 여기에서 다운로드할 수 있습니다: http://scripts.incutio.com/httpclient/
<?php
require_once 'class/HttpClient.php';
$params = array('웹' => 'www.abc.com',
'비밀번호' => '123456',
'액션' => '확인',
'pseid' => 'NDE005',
'amt' => 1);
$pageContents = HttpClient::quickPost('http://ics.server.com/index.php', $params);
$result = 폭발(',', $pageContents);
print_r($결과);
?>
server.php
<?php
의 SOAP 모드
함수 getQuote($fpsecode) {
글로벌 $dbh;
$결과 = 배열();
노력하다 {
$query = "tblbalance에서 fprice, fcansale, fbalance, fbaltip을 선택하세요. 여기서 upper(trim(fpsecode)) = :psecode 제한은 1입니다.";
$stmt = $dbh->준비($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)) {
//
}
} 잡기(PDOException $e) {
echo $e->getMessage();
}
return $fprice; //배열을 반환할 수 있습니다.
}
$dsn = 'pgsql:host=192.168.*.* 포트=5432 dbname=db 사용자=123456 비밀번호=123456';
노력하다 {
$dbh = 새로운 PDO($dsn);
} 잡기(PDOException $e) {
die('연결 실패: ' . $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // WSDL 캐시 비활성화
$server = new SoapServer("stockquote.wsdl") //구성 파일
$server->addFunction("getQuote");
$서버->핸들();
?>
stockquote.wsdl
<?xml 버전 ='1.0' 인코딩 ='UTF-8' ?>
<정의 이름='주식 시세'
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'>
<부분 이름='기호' 유형='xsd:string'/>
</메시지>
<메시지 이름='getQuoteResponse'>
<부분 이름='결과' 유형='xsd:float'/>
</message>
<portType name='StockQuotePortType'>
<작업 이름='getQuote'>
<입력 메시지='tns:getQuoteRequest'/>
<출력 메시지='tns:getQuoteResponse'/>
</조작>
</portType>
<바인딩 이름='StockQuoteBinding' 유형='tns:StockQuotePortType'>
<비누:바인딩 스타일='rpc'
Transport='http://schemas.xmlsoap.org/soap/http'/>
<작업 이름='getQuote'>
<soap:작업 비누Action='urn:xmethods-delayed-quotes#getQuote'/>
<입력>
<soap:body use='인코딩' 네임스페이스='urn:xmethods-delayed-quotes'
인코딩스타일='http://schemas.xmlsoap.org/soap/encoding/'/>
</입력>
<출력>
<soap:body use='인코딩' 네임스페이스='urn:xmethods-delayed-quotes'
인코딩스타일='http://schemas.xmlsoap.org/soap/encoding/'/>
</출력>
</조작>
</bind>
<서비스 이름='StockQuoteService'>
<port name='StockQuotePort' 바인딩='StockQuoteBinding'>
<비누:주소 위치='http://192.168.3.9/php5/server.php'/>
</포트>
</서비스>
</정의>
client.php
<?php
$client = new SoapClient("stockquote.wsdl");
$result = $client->getQuote("nde005");
print_r($결과);
?>