程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP soap拓展的使用

PHP soap拓展的使用

編輯:關於PHP編程

SOAP
1. Simple Object Access Protocol 簡單對象訪問協議
主要包括下面四部分:
a) SOAP 封裝: 用於將傳輸數據中的內容, 發送端消息, 接收端信息和處理方式等信息封裝起來以准備數據傳輸.
b) SOAP 編碼規則: 用於表示傳輸數據中各項的數據類型等信息
c) SOAP 遠程過程調用協定: 用於進行遠程過程調用及應答的協議
d) SOAP 綁定協議: 用於表示信息交換的底層協議
Ø PHP5 中SOAP 應用及配置
=========================================================================
1. PHP 5 中新增了內置的 SOAP 擴展,我們稱之為 ext/soap 。它是作為 PHP 的一部分提供的,因此不需要下載、安裝和管理單獨的包。
2. ext/soap 可能已經編譯但沒有加載,因此需要更新 PHP 配置,以便加載 ext/soap 。編輯 php.ini 並找到 Dynamic Extensions 部分,在這裡增加一行代碼來自動加載該擴展。 在 Windows 上,這一代碼行是:extension=php_soap.dll
如果以前沒有加載過任何可選的擴展,可能還要設置 extension_dir 指令,讓它指向包含擴展庫(其中包括 php_soap )的目錄:
extension_dir=”C:/php/ext/” (在 Windows 上使用正斜槓)
3. 完成配置後ext/soap 顯示為:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir=”/tmp”
; (time to live) Sets the number of second while cached file will be used
; instead of original one.
soap.wsdl_cache_ttl=86400
這段配置控制了 SOAP 擴展的 WSDL 緩存特性。默認情況下,WSDL 描述文件在 24 小時(86400 秒)內都緩存在 /tmp 目錄下。現在要設置 soap.wsdl_cache_enabled=0 ,否則,在開發代碼時,您會遇到一些莫名其妙的行為。完成開發之後,要記得打開 WSDL 緩存 ,使代碼運行得更快。
========================================================================
SOAP 擴展庫( 主要包括三種對象)
1. SoapServer : 用於在創建PHP 服務端頁面時定義可被調用的函數及返回響應數據.
格式為: $soap = new SoapServer($wsdl, $array);
說明:$wsdl 為SOAP 使用的WSDL 文件, 是描述WebService 的一種標准格式. 設為NULL 表示不使用WSDL 模式. 如果想用的話可以用ZED 生成.
$array 是SoapServer 的屬性信息, 是一個數組.
注意 :$array 中包括一個uri, 和encoding, 如果是客戶端程序中還要包含一個location.
其中’uri ‘ 選項是必須的 ,但其值可以隨便填 ,可以為空(”), 但不可以為null .
‘encoding ‘ 對於中文的處理,是必須的,一般填’gb2312′ ( 否則會出錯, 因為默認為’utf-8′ ).
該對象的addFunction 方法用來聲明哪個函數可以被客戶端調用,
語法格式為:$soap -> addFunction($function_name);
該對象的handle 方法用來處理用戶的輸入並調用相應的函數, 最後返回給客戶端處理後的結果,
語法格式為:$soap -> handle([$soap_request]);
說明:$soap_request 是一個可選參數, 用來表示用戶的請求信息, 如果不指定, 則表示服務器將接收用戶的全部請求 .
2. SoapClient : 用於調用遠程服務器上的SoapServer 頁面, 並實現了對相應函數的調用.
語法格式為:$soap = new SoapClient($wsdl, $array);
注意 : 對於soap client,’location ‘ 和’uri’ 選項都是必須的 ; 其中’location ‘ 必須為soap server 的URL , 必須准確, 但uri 似乎可以隨便填,不過最好與soap server 中的uri 一致. 而’encoding ‘ 對於中文用戶是必須的
創建該對象後, 調用服務器頁面中的函數相當於調用SoapClient 的方法
語法格式為:$soap -> user_function($params);
說明:user_function 是服務器端定義的可以被調用中的函數中的一個或幾個函數.
3. SoapFault : 用於生成在SOAP 訪問過程中可能出現的錯誤.
語法格式為:$fault = new SoapFault($faultcode, $faultstring);
說明:$faultcode 是用戶自定義的錯誤代碼, 如果沒有定義的話應該是HTTP( 印象中),$faultstring 是用戶自定義的錯誤信息.
該對象會在服務器端頁面出現錯誤時自動生成, 或者通過用戶自行創建SoatFault 對象來獲得相應的錯誤信息.
在客戶端捕獲SoapFault 對象後, 可以通過下面的代碼獲得錯誤代碼的錯誤信息
$fault -> faultcode; // 錯誤代碼
$fault -> faultstring; // 錯誤信息

下面的例子:
soapserver.php

view source
print
?01.<?php
02.
03.function reserve($arr){
04.return http_build_query($arr);
05.}
06.
07.$soap = new SoapServer(NULL,array('uri'=>'http://www.xhbin.com'));
08.
09.//為對象添加一個用戶自定義的函數
10.$soap->addFunction('reserve');
11.
12.$soap->handle();
13.?>
soapclient.php

view source
print
?01.<?php
02.
03.try{
04.
05.$client = new SoapClient(NULL,array('location'=>'http://localhost/exercise/soap/soapserver.php','uri'=>'http://www.xhbin.com'));
06.
07.$arr = array('id'=>3,"tag"=>"PHP MYSQL","search"=>"soap");
08.
09.echo $string = $client->reserve($arr);
10.
11.}catch(SoapFault $fault){
12.
13.echo "FAULT!Code:".$fault->faultcode."String:".$fault->faultstring;
14.
15.}
16.
17.?>
輸出的結果為:id=3&tag=PHP+MYSQL&search=soap.
成功。。。

 

摘自 陽光司達

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved