您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關php中soap指的是什么意思的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
soap是基于XML和HTTP通信協議,在php中使用soap的方法是添加一下php的soap模塊,也就是在php.ini里面加上“soap.so”即可。
一、php soap是什么意思?什么是wsdl,為什么要用他們?
SOAP是基于XML和HTTP通信協議,xml各種平臺,各種語言都支持的一個種語言。http呢它得到了所有的因特網瀏覽器及服務器的支持。
WSDL 指網絡服務描述語言 (Web Services Description Language),是一種使用 XML 編寫的文檔。這種文檔可描述某個 Web service。它可規定服務的位置,以及此服務提供的操作。
我是做php的,你是java的,他是做.net,如果我們三個之間要進行通信,要進行數據交換,怎么辦呢?我們需要一個能和我們都能通信的工具。soap,wsdl被創造出來,使得運行在不同的操作系統并使用不同的技術和編程語言的應用程序可以互相進行通信。
二、實例
如果php要使用soap的話,通常做法是,添加了一下php的soap模塊,在php.ini里面加上soap.so,下面介紹一個不要添加soap.so文件,也可以實現soa
//包函nusoap.php require_once('./lib/nusoap.php'); //創建服務端 $server=newsoap_server; //定義客戶端調用方法 $server->register('hello'); //調用方法以及參數 functionhello($name) { return'Hello, '.$name; } $HTTP_RAW_POST_DATA= isset($HTTP_RAW_POST_DATA) ?$HTTP_RAW_POST_DATA:''; $server->service($HTTP_RAW_POST_DATA); ?>
p的方法
nusoap是php寫的一個功能文件,包涵進來就可以用了,網上很多自己去搜一下吧。
1、不使用wsdl
a、服務端helloworld2.php
b、客戶端hello.php
//包函nusoap.php require_once('./lib/nusoap.php'); //新建一個soap客戶端,調用服務端提供的wsdl //$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true); $client=newsoapclient('http://localhost/test/helloworld2.php'); //查看一下是不是報錯 $err=$client->getError(); if($err) { //顯示錯誤 echo' Constructor error '.$err.' '; } //調用服務端的方法 $result=$client->call('hello',array('person'=>"this is a test")); echo' Result '; print_r($result); echo' '; ?>
2、使用wsld
a、服務器端
//包函nusoap.php require_once('./lib/nusoap.php'); //新建一個soap服務 $server=newsoap_server(); //初始化支持wsdl $server->configureWSDL('hellowsdl2','urn:hellowsdl2'); //定義數據結構來接收數據 $server->wsdl->addComplexType( 'Person', 'complexType', 'struct', 'all', '', array( 'firstname'=>array('name'=>'firstname','type'=>'xsd:string'),//后面的type定義數據的類型,這個是string 'age'=>array('name'=>'age','type'=>'xsd:int'),//后面的type定義數據的類型,這個是int 'gender'=>array('name'=>'gender','type'=>'xsd:string')//后面的type定義數據的類型,這個是string ) ); $server->wsdl->addComplexType( 'SweepstakesGreeting', 'complexType', 'struct', 'all', '', array( 'greeting'=>array('name'=>'greeting','type'=>'xsd:string'), 'winner'=>array('name'=>'winner','type'=>'xsd:string') ) ); //服務器定義的soap調用方法 $server->register('hello',// 方法名字hello,方法就在下面 array('person'=>'tns:Person'),// 客戶端傳來的變量 array('return'=>'tns:SweepstakesGreeting'),//返回參數 'urn:hellowsdl2',// soap名 'urn:hellowsdl2#hello',// soap的方法名 'rpc',// 使用的方式 'encoded',// 編碼 'test'// 存檔 ); //定義上面注冊過的函數hello functionhello($person) { $greeting='Hello, '.$person['firstname'].'. It is nice to meet a '.$person['age'].' year old '.$person['gender'].'.'; $winner='Scott'; //要返回的數據 returnarray( 'greeting'=>$greeting, 'winner'=>$winner ); } // 請求時(試圖)調用服務 $HTTP_RAW_POST_DATA= isset($HTTP_RAW_POST_DATA) ?$HTTP_RAW_POST_DATA:''; $server->service($HTTP_RAW_POST_DATA); ?>
b、客戶端
//包函nusoap.php require_once('./lib/nusoap.php'); //新建一個soap客戶端,調用服務端提供的wsdl //$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true); $client = new soapclient('http://localhost/test/helloworld2.php'); //查看一下是不是報錯 $err = $client->getError(); if ($err) { //顯示錯誤 echo ' Constructor error ' . $err . ' '; } //要向服務端要傳的參數 $person = array('firstname' => 'Willi', 'age' => 22, 'gender' => 'male'); //調用服務端的方法 $result = $client->call('hello', array('person' => $person)); //錯誤審核 if ($client->fault) { echo ' Fault '; print_r($result); echo ' '; } else { $err = $client->getError(); if ($err) { echo ' Error ' . $err . ' '; } else { echo ' Result '; print_r($result); echo ' '; } } //顯示請求信息 echo ' Request '; echo ' ' . htmlspecialchars($client->request, ENT_QUOTES) . ' '; //顯示返回信息 echo ' Response '; echo ' ' . htmlspecialchars($client->response, ENT_QUOTES) . ' '; //顯示調試信息 echo ' Debug '; echo ' ' . htmlspecialchars($client->debug_str, ENT_QUOTES) . ' '; ?>
上面二個例子不管是客戶端,還是服務器端,都是用php寫的,你可以試著用多種語言來寫,來測試一下。不管你是用php的模塊,還是用nusoap,里面具體方法就不在這多說了,手冊里面都有。
SOAP在這里就不用介紹了, 這里只是簡單的實現一個SOAP的實例, 不多說 ,看代碼吧。 soap分為server和client, 我們要使client去調用server的代碼. 首先看server短的代碼:
這個是server端的代碼: server.php
<?php //聲明一個函數add() ,并返回它的值 function add($a,$b){ return $a+$b; } //實例化一個SoapServer對象, 并將add函數注冊成為其方法 $server = new SoapServer(null,array('uri'=>'http://localhost/')); //指定server端代碼的URI(資源標志符) $server->addFunction("add"); $server->handle();?>
然后使用client端的代碼來調用server端的代碼: client的代碼也很簡單: 如下:
這個是client端的代碼 client.php
<?php //建立一個參數數組,存儲要訪問的提供soap服務的計算機的地址與程序 $arrOptions=array( 'uri'=>'http://localhost/', 'location'=>'http://localhost/soap/server.php', //注意: 這個location指定的是server端代碼在服務器中的具體位置, 我的是在本地根目錄下的soap目錄中, 'trace'=>true, ); $soapObject = new SoapClient(null,$arrOptions); //實例化客戶端對象 echo $soapObject->add(20,30); //調用服務器端的函數add并返回值50?>
ok, 結束了 !
感謝各位的閱讀!關于“php中soap指的是什么意思”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。