PHP程序与服务器端通讯方法小结

  假设有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);
  ?>