首頁 後端開發 php教程 PHP 中使用 SOAP

PHP 中使用 SOAP

Jul 30, 2016 pm 01:29 PM
gt lt nbsp quot soap

SOAP,英文是「肥皂」的意思。但就是這個玩意在很大程度上影響了互聯網世界,前幾年瘋炒“Web服務”概念之後,SOAP就是其成就或者說“遺產”,因為 SOAP 就是迎來實現 Web 服務的。
    SOAP = Simple Object Access Protocol,簡單物件存取協定。它是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的資訊。 SOAP 可以和現存的許多因特網協定和格式結合使用,包括超文本傳輸協定( HTTP),簡單郵件傳輸協定(SMTP),多用途網際郵件擴充協定(MIME)。它還支援從訊息系統到遠端過程呼叫(RPC)等大量的應用程式。
    透過 SOAP 協定實現的 Web 服務,讓全世界的程式設計師所寫的類別、函數可以集合起來,建成一個龐大的函數庫,而且是語言無關的。這為軟體事業描繪了一個燦爛的發展前景,只要網路連在一起,就可以實現代碼級的邏輯共享,過去的跨進程、跨機器、跨網絡的通信問題全部都解決了,而且 http 協定是能夠穿越防火牆的(其實是防火牆一般不封鎖http協定的80端口,否則誰也別上互聯網)。
    難怪很多人都非常看好這項技術,稱其為「激動人心」。而 Web 服務實作起來又很簡單,可以簡單的基於現在網路上無數的 Web 平台來發佈。簡單的往往是最美的,Web服務就是一個現實的例子。
    PHP 中,在 php.ini 檔案中開啟了 php_soap.dll 擴充功能後,就可以支援 SOAP 了。
    在soap擴充庫中,主要包括三種物件。
    1、SoapServer
    用於建立php伺服器端頁面時定義可被呼叫的函數及回傳回應資料。建立一個SoapServer物件的語法格式如下:
    $soap = new SoapServer($wsdl, $array);
    其中,$wsdl為shoap使用得wsdl文件,wsdl 是描述Web Service的一種標準格式, 其中,$wsdl為shoap使用得wsdl文件,wsdl 是描述Web Service的一種標準格式, 其中,$wsdl為shoap使用得wsdl文件,wsdl 是描述Web Service的一種標準格式,其中若將$wsdl設定為null,則表示不使用wsdl模式。 $array是SoapServer的屬性訊息,是一個陣列。
    SoapServer物件的addFunction方法是用來宣告哪個函數可以被客戶端調用,語法格式如下:
    $soap->addFunction($function_name);
   函數名。
    SoapServer物件的handle方法用來處理使用者輸入並呼叫對應的函數,最後傳回給客戶端處理的結果。語法格式如下:
    $soap->handle([$soap_request]);
    其中,$soap是一個SoapServer物件,$soap_request是一個可選參數,用來表示使用者的請求資訊。如果不指定$soap_request,則表示伺服器將接收使用者的全部請求。
    2、SoapCliet
    用於呼叫遠端伺服器上的SoapServer頁面,並實作了對應函數的呼叫。建立一個SoapClient物件的語法格式如下:
    $soap = new SoapClient($wsdl,$array);
    其中,參數$wsdl和$array與SoapServer相同。
    建立SoapClient物件後,呼叫服務端頁面中的函數相當於呼叫了SoapClient的方法,建立語法如下:
    $soap->user_function($params);
   ,$soap->user_function($params);
   要呼叫的函數,$params 是要傳入函數的參數。
    3、SoapFault
    SoapFault用於產生soap存取過程中可能出現的錯誤。建立一個soapFault物件的語法格式如下:
    $fault = new SoapFault($faultcode,$faultstring);
    其中,$faultcode是使用者定義的錯誤代碼,$faultstring是使用者自訂的錯誤訊息。 soapFault 物件會在伺服器端頁面發生錯誤時自動生成,或透過使用者自行建立SoapFault物件時生成。對於 Soap存取時出現的錯誤,用戶端可透過捕捉SoapFalut物件來獲得對應的錯誤訊息。
    在客戶端捕獲SoapFault物件後,可以透過下面的程式碼取得錯誤代碼和錯誤訊息:
    $fault->faultcode;//錯誤代碼
    $fault->faultstring;//錯誤訊息前面建立的SoapFault物件。
    範例:
   檔案 soapfunc.php:
   
    /* 幾個供client端呼叫的函數*/
    functionverse($str);     if(strlen($str)       {
        return new SoapFault('Client','','無效字串');
     
$retval .= $str[(strlen($str)-$i)];
      }
      return $retval;
    }
   ($num1) != intval( $num1))
      {
        return new SoapFault('客戶端','','第一個數字無效');
       {
return new SoapFault('Client','','第二個數字無效');
      }
      return ($num1+$num2);
    'Y-m-d H: i :s',time());
      return $time;
    }
    }
    ?>
   然後將我們傳入的函數註冊,
      //最後的handle()用來處理接受的soap請求
      include_once('soapfunc.php');
     ); //設定時區
      $soap = new SoapServer(null, array('uri'=>"httr://test-rui"));
      $soap->addFunction('reverse'); add2numbers');
      $soap->addFunction('gettime');
      $soap->addFunction(SOAP_FUNCTIONS_ALL)); client .php 內容:
   
      error_reporting (7);
      try
      {
        $client = new SoapClient(null, array('lobcation'=>"http://localhost:8050/_my //test-uri"));
        $str="此字串將被反轉";
        $reversed = $client->reverse($str);會得到'$reversed'";
        $n1 = 20;
        $n2 = 33;
     cho "
";
        echo "如果你試$n1 + $n2, 你會得到$sum";
        echo "
";
        echo "remoye ault)
      {
        echo "故障!代碼:" . $fault->faultcode . “ 細繩:” 。 $fault->faultstring;
      }
    ?>


PHPMang) 對服務透過WSDL Web 對服務的發布。於描述Web服務的語法規範,針對每個Web服務來說起來,它是一個說明文檔,對web服務的位置、協定和介面進行了詳細的說明。包括5部分:類型、訊息、連接埠類型、綁定和服務五部分。

1 Types定義: 類型定義,獨立於語言.對應於SOAP訊息中要傳送的元素資訊的定義
2 Message: 每個web方法對應兩個message定義in和out.而message的定義包含了頭和體
3 PortType: 每個web service對應一個PortType,該PortType中又包含了對其發布的方法, operation(操作)
4 Bindings: 指定每porttype中每個操作(類別以及方法)的綁定資訊,包含input和output的訊息的格式.
5 Service: 每個web service綁定的port資訊

Web 服務除過按照前述的範例形式發布外,還可以透過WSDL 文件來發布。

範例:

要發佈的類,檔案myservice.php:
class service
{
public function HelloWorld()
{
return "Hello"; b)
{
return $a+$b;
}
}

$server=new SoapServer('TestSoap.wsdl',array('soap_version' => SOAP_1_2));

$server-> );

$server->handle();
?>

WSDL 描述文檔,文件TestSoap.wsdl:

targetNamespace="urn:TestSoap"
xmlns:typens="urn:TestSoap"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http:// schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/ "
xmlns="http://schemas.xmlsoap.org/wsdl/">






Hello




SubResponse">SubResponse">SubResponse">SubResponse">SubResponse">SubResponse">Sub











operation >




































>

呼叫程式碼,Client .php:

error_reporting(7);

$client = new SoapClient("http://localhost:8080/_myPHP5/soap/Wsdl/TestSoap.wsdl");
echo $cliclient->Hello(); echo("
");
echo $client->Add(10, 20);
?>

然而,WSDL 文件的編寫是一件很麻煩的事情,無聊又容易出錯。很多人認為那玩意兒不是人寫的,但是,如果有好的軟體工具,那玩意兒又是不需要人寫的。 Zend 公司的 ZED 5.0 系列和 Zend Studio for eclipse 6.0 原來是很好支持 WDSL 的可視化編輯和類的發布的(按照一個類文件智能生成),但 Zend studio 7.0 之後,這方面功能有所減弱。但基於 Eclipse 建構的 Zend studio 7.x,還是有一個 WSDL 的視覺化編輯器,功能也夠用,產生的 WSDL 文件與以前有細微的變化。需要程式設計師必須對 WSDL 文件裡的標籤和元素很熟悉。

附錄:關於PHP 開發Soap 的一些錯誤

1、開發的時候一定要關閉php soap 的緩存,伺服器和客戶端都需要,不然會報:

Fatal error: Uncaught SoapFault exception: [Client] Function (”test”) is not a valid method for this service in ……clien.php:5 Stack trace:

#0 [internal function]: SoapClient->__call('test', Array)
#1 D:xampphtdocsclien. php(5): SoapClient->test()
#2 {main}

關閉方法:

ini_set("soap.wsdl_cache_enabled", "0");

可以透過類似$client->__getFunctions() 等方法查看Soap 的一些資訊。

2、如果偵錯時報告不識別xml錯誤,請確保程式碼裡沒有空格等無關訊息,例如 Utf-8 編碼檔案的 BOM 頭。

作者:張慶(網眼) 西安PHP 教育培訓中心2010-7-11

來自「網眼視界」:http://blog.why100000.com
作者微博:http://t.qq.com/ zhangking
「十萬個為什麼」電腦學習網:http://www.why100000.com


以上就介紹了PHP 使用 SOAP,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解決方法:您的組織要求您更改 PIN 碼 解決方法:您的組織要求您更改 PIN 碼 Oct 04, 2023 pm 05:45 PM

解決方法:您的組織要求您更改 PIN 碼

Windows 11 上調整視窗邊框設定的方法:變更顏色和大小 Windows 11 上調整視窗邊框設定的方法:變更顏色和大小 Sep 22, 2023 am 11:37 AM

Windows 11 上調整視窗邊框設定的方法:變更顏色和大小

如何在 Windows 11 上變更標題列顏色? 如何在 Windows 11 上變更標題列顏色? Sep 14, 2023 pm 03:33 PM

如何在 Windows 11 上變更標題列顏色?

OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題 OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題 Jul 16, 2023 pm 03:29 PM

OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題

Windows 11 上啟用或停用工作列縮圖預覽的方法 Windows 11 上啟用或停用工作列縮圖預覽的方法 Sep 15, 2023 pm 03:57 PM

Windows 11 上啟用或停用工作列縮圖預覽的方法

華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

華為GT3 Pro和GT4的差異是什麼?

Windows 11 上的顯示縮放比例調整指南 Windows 11 上的顯示縮放比例調整指南 Sep 19, 2023 pm 06:45 PM

Windows 11 上的顯示縮放比例調整指南

10種在 Windows 11 上調整亮度的方法 10種在 Windows 11 上調整亮度的方法 Dec 18, 2023 pm 02:21 PM

10種在 Windows 11 上調整亮度的方法

See all articles