soap是一種協定,屬於web service實現所使用的一種技術規範。
web service的介面實現有兩種方式,一種是需要生成wsdl文件的方式,一種是不需要生成wsdl文件的方式。
在實際操作之前,先檢查一下自己的環境,是否支援soap,然後修改一下php.ini組態檔,將「soap.wsdl_cache_enabled」項設定為0。
無需生成wsdl文件的方式
這種方式相較於需要生成wsdl文件的方式,更簡單一些,但是有一些方法並不支援,例如獲取操作方法的__getFunctions(),是否合用看自己的選擇。
server端ts1.php
<?php class testA{ public function sayHi($str){ return 'hi,'.$str; } public function add($a,$b){ return $a+$b; } } $ss = new SoapServer(null, array('uri'=>'sampleA')); $ss->setClass('testA'); $ss->handle();
在server端ts1.php檔案中,建立了一個類,然後建立SoapServer並做設定,uri用來確保一致性。
client端tc1.php
<?php $client = new SoapClient(null, array( 'location'=>'http://10.0.0.232:1075/soap/ts1.php', 'uri'=>'sampleA' )); echo $client->sayHi('Taylor,Swift'); echo "<br/>"; echo $client->add(1,2);
在client端,使用SoapClient物件來進行請求,location指明請求的具體地址,uri的值與server端設定的一致,用來保證一致性。
在瀏覽器輸入http://10.0.0.232:1075/soap/tc1.php來進行存取,可以看到輸出如下圖所示:
這種方式無需生成wsdl文件,實現簡便,但同樣的,因為沒有wsdl文件,client也無法獲取到相關的操作方法,而生成wsdl文件的方式,client端就可以單獨根據一個請求地址來獲取到server端公開的所有介面。
生成wsdl文件的方式
wsdl文件是一個xml文件,通常可以使用公開的類庫SoapDiscovery來生成,我用百度網路硬碟共用一下需要可以直接下載SoapDiscovery.class.php。
server端ts2.php
<?php define('WSDL_FILE','ts2.wsdl'); if(!file_exists(WSDL_FILE)){ require_once('SoapDiscovery.class.php'); $sd = new SoapDiscovery('testD', 'liang'); $str = $sd->getWSDL(); file_put_contents(WSDL_FILE, $str); } $ss = new SoapServer(WSDL_FILE); $ss->setClass('testD'); $ss->handle(); class testD{ public function sayHello($world){ return 'hello,'.$world; } public function add($a, $b){ return $a+$b; } }
server端的ts2.php先檢測了一下需要的wsdl檔案是否存在,若不存在則建立,然後建立SoapServer物件並進行設定,因為使用的是wsdl文件,所以new SoapServer時直接寫入wsdl文件的地址即可。
client端tc2.php
<?php $client = new SoapClient('http://10.0.0.232:1075/soap/ts2.wsdl'); print_r($client->__getFunctions()); echo "<br/>"; echo $client->sayHello('Avril Lavigne'); echo "<br/>"; echo $client->add(9,8);
在client端的tc2.php檔案中,建立SoapClient物件時,直接填入的是請求的wsdl文件的地址,這個文件是由ts2.php生成的。
現在,server端的ts2.php與client端的tc2.php都已經寫好了,那麼現在就需要請求一下ts2.php了,為什麼請求它?
因為我們需要先通過ts2.php來建立wsdl檔案,當然,只有在第一次的時候需要這樣做,當wsdl文件建立好之後,就不需要再這樣做了。
(如果後期修改了ts2.php,那還是需要刪除掉舊的wsdl文件,然後重新請求一下ts2.php用來生成新的wsdl文件。)
1、請求ts2.php用來生成wsdl文件http://10.0.0.232:1075/soap/ts2.php。
2、請求tc2.php檢視返回結果:
3、通過瀏覽器,直接存取wsdl文件的地址,可以看到wsdl文件的具體內容:
php soap也支援各種其它的操作,例如鑑權,頭設定等,這些功能如有需要,可以參閱官方文件。
以上就是詳解php soap實現web service介面服務的詳細內容,更多請關注TW511.COM其它相關文章!