茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729063 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00229.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼]PHP and Web Services 學習筆記

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用php提供Web service
上回提到了如何使用php去呼叫別人提供的web service
這回我們來看看如何提供一個web service給別人吧

server.php

<?php
class HelloServise
{
 //$__dispatch_map 用來定義這個hello function輸出以及輸入的參數型態
 var $__dispatch_map = array();
 function HelloServise()
 {
   //我們在constructor這邊指定好Hello這個函數Input的參數只有一個
   //名稱叫input型態是string
  //傳回值是一個string型態的值
   $this->__dispatch_map['Hello'] =
   array('in' => array('input' => 'string'),
         'out' => array('output' => 'string'),
       );
 }
 function Hello($input)
 {
  return "Hello:[$input]";
 }
}
require_once 'SOAP/Server.php';
require_once 'SOAP/Disco.php';
//產生一個SOAP Server物件
$server = new SOAP_Server;
//產生一個我們要提供的web service物件
$Hello = new HelloServise();
//向SOAP Server註冊我們提供的Web Service名稱叫HelloService
$server->addObjectMap($Hello,'urn:HelloService');
//因為我們取得Client送過來的xml是用POST方式
//所以我們檢查如果送過來的資料是用POST送過來的
//就直接交給SOAP Server去做處理
if ($_SERVER['REQUEST_METHOD']=='POST')
 $server->service($HTTP_RAW_POST_DATA);
else
{
 //產生一個discover物件
 //用來產生wsdl
 $disco = new SOAP_DISCO_Server($server,'HelloServise');
 //設定輸出文件為xml格式
 header("Content-type: text/xml");
 //如果client呼叫的時候是xxx.php?wsdl
 //就呼叫getWSDL()傳回wsdl格式的XML
 //否則就送回正確取得wsdl方式的XML
 if($_SERVER['QUERY_STRING']=='wsdl') echo $disco->getWSDL();
 else  echo $disco->getDISCO();
}
?>

我們來測試一下剛剛寫好的HelloService
client.php

<?php
 require_once("SOAP/Client.php");
 $wsdl=new SOAP_WSDL('http://yourhost/server.php?wsdl');
 $helloClient = $wsdl->getProxy();
 echo $helloClient->Hello("This is a test!");
?>

輸出

Hello:[This is a test!]

是不是很簡單呢
此外這邊在補充一點
WSDL跟SOAP的關係
wsdl是用來描述你提供了哪些web service
用個簡單的說法就是
wsdl就是一個定義檔
定義你提供的物件
SOAP才是真正處理輸入以及輸出xml的主角


原文出處:酷!學園 - [心得]使用php提供Web service
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|