| 導購 | 订阅 | 在线投稿
分享
 
 
 

PHP程序與服務器端通訊方法小結

來源:互聯網網民  2008-05-18 21:58:20  評論

假設有10個網站,分布在各地,它們的庫存要同步,而數據庫不支持遠程連接。

我們要實時地取得服務器的庫存數,可以通過很多種方法,我所知道的有以下幾種:

·CURL方式

·SOCKET方式

·PHP5中的SOAP方式

以下分別給出示例來實現它:

CURL方式

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=" . $website .

"&pwd=" . $pwd . "&action=check&pseid=" . $psecode .

"&amt=" . $amt;

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 = explode(』,』, $curl_result);

curl_close($ch);

print_r($result);

?>

服務器端只需按一定的格式輸出,然後客戶端按此格式接收就可以了如:

echo "OK," . $fpsecode . "," . $fbalance ;//以逗號分隔

SOCKET方式

這個要借助第三方類庫HttpClient,可以到這裏下載: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 = explode(』,』, $pageContents);

print_r($result);

?>

PHP5中的SOAP方式

server.php

<?php

function getQuote($fpsecode) {

global $dbh;

$result = array();

try {

$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; //你可以返回一個數組

}

$dsn = 』pgsql:host=192.168.*.* port=5432 dbname=db user=123456 password=123456』;

try {

$dbh = new PDO($dsn);

} catch (PDOException $e) {

die(』Connection failed: 』 . $e->getMessage());

}

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache

$server = new SoapServer("stockquote.wsdl"); //配置文件

$server->addFunction("getQuote");

$server->handle();

?>

stockquote.wsdl

<?xml version =』1.0』 encoding =』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』/>

</message>

<message name=』getQuoteResponse』>

<part name=』Result』 type=』xsd:float』/>

</message>

<portType name=』StockQuotePortType』>

<operation name=』getQuote』>

<input message=』tns:getQuoteRequest』/>

<output message=』tns:getQuoteResponse』/>

</operation>

</portType>

<binding name=』StockQuoteBinding』 type=』tns:StockQuotePortType』>

<soap:binding style=』rpc』

transport=』http://schemas.xmlsoap.org/soap/http』/>

<operation name=』getQuote』>

<soap:operation soapAction=』urn:xmethods-delayed-quotes#getQuote』/>

<input>

<soap:body use=』encoded』 namespace=』urn:xmethods-delayed-quotes』

encodingStyle=』http://schemas.xmlsoap.org/soap/encoding/』/>

</input>

<output>

<soap:body use=』encoded』 namespace=』urn:xmethods-delayed-quotes』

encodingStyle=』http://schemas.xmlsoap.org/soap/encoding/』/>

</output>

</operation>

</binding>

<service name=』StockQuoteService』>

<port name=』StockQuotePort』 binding=』StockQuoteBinding』>

<soap:address location=』http://192.168.3.9/php5/server.php』/>

</port>

</service>

</definitions>

client.php

<?php

$client = new SoapClient("stockquote.wsdl");

$result = $client->getQuote("nde005");

print_r($result);

?>

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
  假設有10個網站,分布在各地,它們的庫存要同步,而數據庫不支持遠程連接。   我們要實時地取得服務器的庫存數,可以通過很多種方法,我所知道的有以下幾種:   ·CURL方式   ·SOCKET方式   ·PHP5中的SOAP方式   以下分別給出示例來實現它:   CURL方式   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=" . $website .   "&pwd=" . $pwd . "&action=check&pseid=" . $psecode .   "&amt=" . $amt;   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 = explode(』,』, $curl_result);   curl_close($ch);   print_r($result);   ?>   服務器端只需按一定的格式輸出,然後客戶端按此格式接收就可以了如:   echo "OK," . $fpsecode . "," . $fbalance ;//以逗號分隔   SOCKET方式   這個要借助第三方類庫HttpClient,可以到這裏下載: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 = explode(』,』, $pageContents);   print_r($result);   ?>   PHP5中的SOAP方式   server.php   <?php   function getQuote($fpsecode) {   global $dbh;   $result = array();   try {   $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; //你可以返回一個數組   }   $dsn = 』pgsql:host=192.168.*.* port=5432 dbname=db user=123456 password=123456』;   try {   $dbh = new PDO($dsn);   } catch (PDOException $e) {   die(』Connection failed: 』 . $e->getMessage());   }   ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache   $server = new SoapServer("stockquote.wsdl"); //配置文件   $server->addFunction("getQuote");   $server->handle();   ?>   stockquote.wsdl   <?xml version =』1.0』 encoding =』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』/>   </message>   <message name=』getQuoteResponse』>   <part name=』Result』 type=』xsd:float』/>   </message>   <portType name=』StockQuotePortType』>   <operation name=』getQuote』>   <input message=』tns:getQuoteRequest』/>   <output message=』tns:getQuoteResponse』/>   </operation>   </portType>   <binding name=』StockQuoteBinding』 type=』tns:StockQuotePortType』>   <soap:binding style=』rpc』   transport=』http://schemas.xmlsoap.org/soap/http』/>   <operation name=』getQuote』>   <soap:operation soapAction=』urn:xmethods-delayed-quotes#getQuote』/>   <input>   <soap:body use=』encoded』 namespace=』urn:xmethods-delayed-quotes』   encodingStyle=』http://schemas.xmlsoap.org/soap/encoding/』/>   </input>   <output>   <soap:body use=』encoded』 namespace=』urn:xmethods-delayed-quotes』   encodingStyle=』http://schemas.xmlsoap.org/soap/encoding/』/>   </output>   </operation>   </binding>   <service name=』StockQuoteService』>   <port name=』StockQuotePort』 binding=』StockQuoteBinding』>   <soap:address location=』http://192.168.3.9/php5/server.php』/>   </port>   </service>   </definitions>   client.php   <?php   $client = new SoapClient("stockquote.wsdl");   $result = $client->getQuote("nde005");   print_r($result);   ?>
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有