PHP的SOAP原理及實現
1. 簡介:
SOAP : (全稱Simple Object Access Protocol) 為交換資料的一種協議規範,該通訊協定位於HTTP之上,以XML格式語言進行資料互換,使用情境:如果各項目之間使用不用的開發語言要進行資料互換,就需要一個互相都能通訊的工具,WSDL,SOAP為此誕生
WSDL: WSDL 指網路服務描述語言 (Web Services Description Language),WSDL 是一種使用 XML 編寫的文檔。這種文檔可描述某個 Web service。它可規定服務的位置,以及此服務提供的操作(或方法)。
2. 配置:
PHP的SOAP擴充開啟及配置
WIn環境
開啟PHP.ini extension=php_soap.dll去掉前面的分號
Linux環境
編譯時間加上 --enable-soap
WSDL緩衝類型 1為磁碟 2為記憶體
soap.wsdl_cache = 1
快取檔案儲存位置
soap.wsdl_cache_dir = /tmp
開啟或關閉WSDL緩衝功能,由於每次進行SOAP都會有下載對方XML文檔的過程,也是其效率低下的原因
soap.wsdl_cache_enabled =1
快取檔案的最大數量
soap.wsdl_cache_limit
快取檔案存留時間
soap.wsdl_cache_ttl = 3600
3. 應用執行個體:
a. 不使用wsdl的情況
服務端:
"index.php"));$a->setClass("testclass"); //指定一個類中的所有方法//$a->addFunction("test"); //指定單個方法$a->handle(); //處理訪問
uri為必填項,用戶端的uri必須和服務端的保持一致
用戶端
try{$client = new SoapClient(null, array("location"=>"http://localhost/instance/index.php","uri"=>"index.php"));//echo $client->getName("getName"); //調用方法echo $client->__soapCall ("getName",array("name")); //調用方法}catch(Exception $e){print_r($e->getMessage(),true);}
location為SOAP服務端訪問地址,uri與服務端保持一致
b. 使用WSDL方法
因使用wsdl之前需要手動產生xml檔案,手寫的話太過繁瑣,可使用SoapDiscovery.class.php 開源類產生
下載地址
getWSDL(); //產生XML檔案echo $filename;
服務端
$a = new SoapServer("testclass.wsdl");$a->setClass("testclass"); //指定一個類中的所有方法$a->handle(); //處理訪問
用戶端
try{$client = new SoapClient("http://localhost/instance/index.php?wsdl");//echo $client->getName("getName");//echo $client->__soapCall ("getName",array("name"));print_r($client->__getFunctions()); //列印服務端所有提供的方法
}catch(Exception $e){print_r($e->getMessage(),true);}
擴充類所提供的方法可參考PHP Manual