一個例子便能說明一切,讓咱們先看一個例子
爲了說明如何應用nusoap和php來構建web services,咱們將舉一個簡單的例子。這個例子應用程序由一個php web services的服務器端和客戶端組成。他將實現兩個功能:顛倒一個字符串字符的順序,求兩個數的和。
php soap服務器
用php和nusoap來創建soap服務器很是容易。基本上,你只要寫出你想要暴露給你的web services的函數,而後用nusoap去註冊它們就能夠了。
ok,另外還須要兩步才能完成php soap服務器的創建。首先你還要在你的php代碼中建立nusoap對象的一個實例,而後用http post方法將原始數據傳給nusoap進行處理。聽起來簡單吧。先看看清單1。
soapfunc.phpphp
<? require_once(nusoap.php); function reverse($str){ $retval = ""; if(strlen($str) < 1) { return new soap_fault(client,,invalid string); } for ($i = 1; $i <= strlen($str); $i++) { $retval .= $str[(strlen($str) - $i)]; } return $retval; } function add2numbers($num1, $num2) { if (trim($num1) != intval($num1)) { return new soap_fault(client, , the first number is invalid); } if (trim($num2) != intval($num2)) { return new soap_fault(client, , the second number is invalid); } return ($num1 + $num2); } ?>
soapfunc.php的源文件。這個文件包含了咱們想經過soap協議暴露給web services的兩個函數:reverse和add2numbers,它們是咱們這個web services 應用的核心。函數reverse帶一個參數,顛倒字符串中的字符的順序,而後返回。
web
soapserver.php數組
<? require_once(nusoap.php); include(soapfunc.php); $soap = new soap_server; $soap->register(reverse); $soap->register(add2numbers); $soap->service($http_raw_post_data); ?>
nusoap註冊函數和調用soap處理程序的用法。你看到了,註冊你的兩個函數(在soapfunc.php中)、傳遞post數據給 soap_server對象,就跟建立一個新的soap_server對象實例同樣的簡單。soap_server對象將要檢查post數據並肯定將調用 哪一個函數,而後向這個php函數傳遞參數。從php函數返回的數據被從新包裝爲soap響應並傳送給請求服務的soap客戶端。
php soap客戶端
如今咱們已經利用nusoap和php建立了一個soap服務器,咱們須要對它進行測試。像咱們創建soap服務器程序同樣,咱們能夠在php中利用nusoap再創建一個soap的客戶端程序。清單3給出了php soap客戶端程序的源程序。
如今咱們已經利用nusoap和php建立了一個soap服務器,咱們須要對它進行測試。像咱們創建soap服務器程序同樣,咱們能夠在php中利用nusoap再創建一個soap的客戶端程序。清單3給出了php soap客戶端程序的源程序。瀏覽器
soapclient.php服務器
<? include(nusoap.php); $client = new soapclient(http://localhost/soapserver.php); $str = "this string will be reversed"; $params1 = array(str=>$str); $reversed = $client->call(reverse,$params1); echo "if you reverse $str, you get $reversed<br>\n"; $n1 = 5; $n2 = 14; $params2 = array(num1=>$n1, num2=>$n2); $added = $client->call(add2numbers, $params2); echo "if you add $n1 and $n2 you get $added<br>\n"; ?>
爲了在一個soap服務器上能使用php客戶端程序,你還得作三件事情。第一,你要建立一個soapclient對象。soapclient對象負責處理 參數的編組和soap協議。soapclient須要一個必須是url的參數。這個url能夠指向一個實際soap服務器的http終端或者一個wsdl 描述。在咱們這個例子裏,它是指向咱們的php soap服務器的一個url。
當調用須要參數的函數時,你須要先建立一個參數數組,數組包括一組鍵-值(key-value)對。鍵(key)是參數的名字,值(value)是參數的值。
當須要調用函數時,你就用soapclient對象去調用,而且傳入兩個參數。第一個參數是你要調用的函數的名字,第二個參數是包含soap函數所帶參數的一個數組,主調函數將會返回你調用的soap函數的值。
要運行這個例子,只要簡單的在web瀏覽器中輸入soapclient.php的url。你將相似如下的輸出:
if you reverse this string will be reversed, you get desrever eb lliw gnirts siht if you add 5 and 14 you get 1Array 函數