国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP中soap用法示例【SoapServer服務端與SoapClient客戶端編寫】

2024-05-05 00:06:01
字體:
來源:轉載
供稿:網友

本文實例講述了PHP中soap用法。分享給大家供大家參考,具體如下:

一、首先要設置服務器環境

修改php.ini

得添加extension=php_soap.dll (加載soap 內置包)

修改soap.wsdl_cache_enabled=1 改為soap.wsdl_cache_enabled=0 這個是soap的緩存,測試的時候最好改為0,上線穩定了改為1

soap有兩種模式一種是wsdl,一種是no-wsdl

二、熟悉幾個函數

1. SoapServer

SoapServer用于創建php服務器端頁面時定義可被調用的函數及返回 響應數據

格式:

$soap = new SoapServer($wsdl,$array); 

其中,$wsdl為soap使用得wsdl文件,wsdl是描述Web Service的一種 標準格式,若將$wsdl設置為null,則表示不使用wsdl模式。
$array是 SoapServer的屬性信息,是一個數組。
SoapServer對象的addFunction方法是用來聲明哪個函數可以被客戶端調用, 語法格式如下:

$soap->addFunction($function_name);

其中,$soap是一個SoapServer對象,$function_name是需要被調用的函數名。

SoapServer對象的handle方法用來處理用戶輸入并調用相應的函數,最后返回 給客戶端處理的結果。語法格式如下: 

$soap->handle([$soap_request]); 

其中,$soap是一個SoapServer對象,$soap_request是一個可選參數,用來表示 用戶的請求信息。如果不指定$soap_request,則表示服務器將接收用戶的全部 請求。

2. SoapClient

SoapClient用于調用遠程服務器上的SoapServer頁面,并實現了對相應函數的調用

格式:

$soap = new SoapClient($wsdl,$array); 

參數$wsdl和$array與SoapServer相同

SoapClient的方法, 創建語法如下:

$soap->user_function($params); 

其中,$soap是一個SoapClient對象,user_function是服務器端要調用的函數,$params 是要傳入函數的參數。

3. SoapFault

SoapFault用于生成soap訪問過程中可能出現的錯誤。創建一個soapFault對象的語法格式

格式:

$fault = new SoapFault($faultcode,$faultstring); 

其中,$faultcode是用戶定義的錯誤代碼,$faultstring是用戶自定義的錯誤信息。soapFault 對象會在服務器端頁面出現錯誤時自動生成,或者通過用戶自行創建SoapFault對象時生成。對于 Soap訪問時出現的錯誤,客戶端可通過捕捉SoapFalut對象來獲得相應的錯誤信息。 在客戶端捕獲SoapFault對象后,可以通過下面的代碼獲得錯誤代碼和錯誤信息。

$fault->faultcode;//錯誤代碼 $fault->faultstring;//錯誤信息 

其中,$fault是在前面創建的SoapFault對象。

4. SoapHeader

soapheader用于描述soap的header信息,一般用于認證

/* *SoapHeader參數說明如下所示: *'http://tempuri.org/'  namespace(命名空間可省略) *'MySoapHeader'     SoapHeader頭的類名 *'array(...)'      存放標識身份的字符串參數 *'true'         是否必須處理該header*/

格式:

$h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);

三、實例

不用wsdl模式的代碼

服務端:

//認證服務端class Test{  public function auth($a)  {    if($a != '123456789'){      throw new SoapFault('Server', '您無權訪問');    }  }  function say()  {    return 'Hi11111';  }}$srv = new SoapServer(null, array('uri' => 'http://192.168.0.153/hao'));$srv->setClass('Test');$srv->handle();

Test類中auth是認證判斷的,這個方法對應客戶端soapheader中的方法

客戶端:

//加密的客戶端$cli = new SoapClient(null, array('uri' => 'http://192.168.0.153/hao/', 'location' => 'http://192.168.0.153/hao/test.php', 'trace' => true,'encoding'=>'utf-8'));$h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);$cli->__setSoapHeaders(array($h));try {echo $cli->say();} catch (Exception $e) {echo $e->getMessage();}

soapheader中auth對應服務端auth方法

如果不 認證,可以去掉下面這兩行:

$h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);$cli->__setSoapHeaders(array($h));

wsdl模式

首先先生成wsdl文件,至于怎么生成網站很多

服務端:

//wsdl服務端Require './server.class.php';$server = new SoapServer('./server.wsdl');$server->setClass('Server');$server->handle();

server.class.php類代碼

class Server {  public function auth($a){    if($a != '123456789'){    throw new SoapFault('Server', '您無權訪問');    }  }  public function test() {    return 'you are testing';  }}

客戶端:

//wsdl文件客戶端$soap = new SoapClient('http://192.168.0.153/hao/server.wsdl'); //如果是遠程,那當然寫dizzylion.wsdl的URL了。$h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);$soap->__setSoapHeaders(array($h));try {echo $soap->test();} catch (Exception $e) {echo $e->getMessage();}

 

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 桑日县| 延津县| 温宿县| 黄浦区| 江安县| 新沂市| 日土县| 绥滨县| 娄底市| 西贡区| 滦南县| 镶黄旗| 樟树市| 灯塔市| 讷河市| 闻喜县| 丹东市| 邢台市| 鹤壁市| 申扎县| 商河县| 达孜县| 清原| 牡丹江市| 涪陵区| 新津县| 屏南县| 浮梁县| 凤阳县| 垣曲县| 凤山县| 德安县| 石家庄市| 黑河市| 元朗区| 杭锦后旗| 色达县| 镇安县| 工布江达县| 台江县| 永宁县|