程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> NuSOAP構建基於PHP的SOAP服務

NuSOAP構建基於PHP的SOAP服務

編輯:關於PHP編程

許多機構已經采用了Apach和PHP作為他們的Web應用環境。在Web services模式中采用PHP可能看上去可能會比較難。但是事實上,搭配NuSoap,你可以輕松的應用PHP構建SOAP的客戶端和服務器端。

為了說明如何應用NuSoap和PHP來構建Web services,我們將舉一個簡單的例子。這個例子應用程序由一個PHP Web services的服務器端和客戶端組成。他將實現兩個功能:顛倒一個字符串字符的順序,求兩個數的和。

PHP SOAP服務器
用PHP和NuSoap來建立SOAP服務器非常容易。基本上,你只要寫出你想要暴露給你的Web services的函數,然後用NuSoap去注冊它們就可以了。

OK,另外還需要兩步才能完成PHP SOAP服務器的建立。首先你還要在你的PHP代碼中創建NuSoap對象的一個實例,然後用HTTP POST方法將原始數據傳給NuSoap進行處理。聽起來簡單吧。先看看清單1。

清單1:soapfunc.php

<?
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);
}
?>

清單1給出了soapfunc.php的源文件。這個文件包含了我們想通過SOAP協議暴露給Web services的兩個函數:reverse和add2numbers,它們是我們這個Web services 應用的核心。函數reverse帶一個參數,顛倒字符串中的字符的順序,然後返回。

清單2: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);
?>

清單2舉例說明了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客戶端程序的源程序。

清單3: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> ";

$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> ";
?>

為了在一個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 19

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved