利用PHP SOAP實現web service

2022-05-02 08:57:13 字數 1824 閱讀 3052

一 什麼是soap?可以做什麼?

二 什麼是wsdl?可以做什麼?

wsdl 指網路服務描述語言。是一種基於xml編寫的文件。為使用者提供詳細的介面說明書。

怎樣向別人介紹你的web服務(web service)有哪些功能,以及每個函式呼叫時的引數呢?你可能會自己寫一套文件,甚至可能會口頭告訴使用你web服務的人。

這些非正式的的方法至少都有乙個嚴重的問題:當程式設計師坐到電腦前,想要使用你的web服務的時候,他們的開放環境無法給他們提供任何幫助,因為這些工具根本不了解你的web服務.

解決方法是:用機器能閱讀的方式提供乙個正式的描述文件。web服務描述語言(wsdl)就是這樣乙個基於xml的語言。用於描述web服務及其函式,引數,返回值。因是基於xml,所以wsdl即使機器可閱讀,又是人可閱讀的。

三 利用php soap例項web service

php有兩個擴充套件可以實現web service,乙個是nusoap,乙個是php 官方的soap擴充套件,由於soap是官方的,所以我們這裡以soap來實現web service.由於預設是沒有開啟soap擴充套件的,所以自己先看一下soap擴充套件有沒有開啟。

在soap編寫web service的過程中主要用到了soapclient,soapserver,soapfault三個類。

soapclient類

這個類用來使用web services。soapclient類可以作為給定web services的客戶端。

它有兩種操作形式:

* wsdl 模式

* non-wsdl 模式

在wsdl模式中,構造器可以使用wsdl檔名作為引數,並從wsdl中提取服務所使用的資訊。

non-wsdl模式中使用引數來傳遞要使用的資訊。

soapserver類

這個類可以用來提供web

services。與soapclient類似,soapserver也有兩種操作模式:wsdl模式和non-wsdl模式。這兩種模式的意義跟

soapclient的兩種模式一樣。在wsdl模式中,服務實現了wsdl提供的介面;在non-wsdl模式中,引數被用來管理服務的行為。

在soapserver類的眾多方法中,有三個方法比較重要。它們是soapserver::setclass(),soapserver::addfunction()和soapserver::handle()。

四 例項

定義乙個提供服務的php類,這個類所提供的函式就是web service對外提供的服務

class

personinfo

}

下面給出伺服器端的**:

//

包含提供服務的類進來

include 'test.php';

/*建立soap服務端

引數1 : wsdl的url位址,如果不是wsdl模式,傳個null

引數2 : 如果是wsdl模式,可以不傳.如果不是wsdl模式,傳個陣列.定義個uri子單元. */

$s = new soapserver(null,array("uri"=>"此處隨便寫,只是命名空間"));

//設定用於處理soap請求的類

$s -> setclass("personinfo");

//處理請求

$s -> handle();

下面給出客戶端的**:

try

catch(soapfault $e

)catch(exception

$e)

利用PHP SOAP實現WEB SERVICE

php有兩個擴充套件可以實現web service,乙個是nusoap,乙個是php 官方的soap擴充套件,由於soap是官方的,所以我們這裡以soap來實現web service.由於預設是沒有開啟soap擴充套件的,所以自己先看一下soap擴充套件有沒有開啟。在soap編寫web servic...

利用php soap實現web service

今天學習到soap,偶遇到一介紹soap的博文,mark下。php有兩個擴充套件可以實現web service,乙個是nusoap,乙個是php 官方的soap擴充套件,由於soap是官方的,所以我們這裡以soap來實現web service.由於預設是沒有開啟soap擴充套件的,所以自己先看一下s...

利用PHP SOAP實現WEB SERVICE

php有兩個擴充套件可以實現web service,乙個是nusoap,乙個是php 官方的soap擴充套件,由於soap是官方的,所以我們這裡以soap來實現web service.由於預設是沒有開啟soap擴充套件的,所以自己先看一下soap擴充套件有沒有開啟。在soap編寫web servic...