標籤:style blog http java color 使用
許多機構已經採用了Apach和PHP作為他們的Web應用環境。在Web services模式中採用PHP可能看上去可能會比較難。但是事實上,搭配NuSoap,你可以輕鬆的應用PHP構建SOAP的用戶端和伺服器端。
PHP SOAP伺服器
用PHP和NuSoap來建立SOAP伺服器非常容易。基本上,你只要寫出你想要暴露給你的Web services的函數,然後用NuSoap去註冊它們就可以了。OK,另外還需要兩步才能完成PHP SOAP伺服器的建立。首先你還要在你的PHP代碼中建立NuSoap對象的一個執行個體,然後用HTTP POST方法將未經處理資料傳給NuSoap進行處理
NuSOAP的使用比較簡單,其中最常用到的類是soap_server和soapclient, 其中soap_server用於建立 Webservice服務,類soapclient則用於調用Webservice .這兩個類的定義都在lib/nusoap.php中,因此我們在建立 或調用Webservice介面程式時均需要引用該檔案.
NuSoap是PHP環境下的WebService編程工具,用於建立或調用WebService。它是一個開源軟體,是完全採用PHP語言編寫的、通過HTTP收發SOAP訊息的一系列PHP類,由NuSphereCorporation(http://dietrich.ganx4.com/nusoap/ )開發。NuSOAP的一個優勢是不需要擴充庫的支援,這種特性使得NuSoap可以用於所有的PHP環境,不受伺服器安全設定的影響。
1. 首先,去http://sourceforge.net/projects/nusoap/ 下載nusoap-0.9.5.zip ,解壓後把 lib 檔案夾放到與你的WebService 程式相同的目錄,如/WebService/lib 。
2. 服務端:建立 nusoapService.php 檔案。
<?phprequire_once ("lib/nusoap.php");$server = new soap_server ();// 避免亂碼$server->soap_defencoding = ‘UTF-8‘;$server->decode_utf8 = false;$server->xml_encoding = ‘UTF-8‘;$server->configureWSDL ( ‘sayHello‘ ); // 開啟 wsdl 支援/* 註冊需要被用戶端訪問的程式 類型對應值: bool->"xsd:boolean";
string->"xsd:string"; int->"xsd:int";
float->"xsd:float";*/$server->register ( ‘sayHello‘, // 方法名 array ("name" => "xsd:string" ), // 參數,預設為 "xsd:string"; array ("return" => "xsd:string")// 傳回值,預設為 "xsd:string";
); //isset 檢測變數是否設定$HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : ‘‘;//service 處理用戶端輸入的資料$server->service ( $HTTP_RAW_POST_DATA );/** * 供調用的方法 * @param $name */function sayHello($name) { return "Hello, { $name } !";}?>
3. 用戶端:建立 nusoapClient.php 檔案。
<?phprequire_once ("lib/nusoap.php");/* 通過 WSDL 調用 WebService 參數 1 WSDL 檔案的地址 ( 問號後的 wsdl 不能為大寫 ) 參數 2 指定是否使用 WSDL $client = new soapclient(‘http://localhost/WebService/nusoapService.php?wsdl‘,true); */$client = new soapclient ( ‘http://localhost/WebService/nusoapService.php‘ );$client->soap_defencoding = ‘UTF-8‘;$client->decode_utf8 = false;$client->xml_encoding = ‘UTF-8‘;// 參數轉為數組形式傳遞$paras = array (‘name‘ =>; ‘Bruce Lee‘ );// 目標方法沒有參數時,可省略後面的參數$result = $client->call ( ‘sayHello‘, $paras );// 檢查錯誤,擷取傳回值if (! $err = $client->getError ()) { echo " 返回結果: ", $result;} else { echo " 調用出錯: ", $err;}?>
註:
用 nusoap 實現 WebService, 不要開啟 php 的 SOAP 延伸模組
檔案代碼不能有任何輸出 , 否則調用時會報類似如下錯誤:
XML error parsing SOAP payload on linex( 行號 ): Reserved XML Name