首頁 php教程 PHP开发 使用php來實現網路服務

使用php來實現網路服務

Dec 14, 2016 pm 01:36 PM

以下文的翻譯名稱對照表: 
payload: 交談內容 
object: 實例 
function: 函數 
使用php來實現網絡服務 
使用框架: WSO2 W/PHP 
使用php來實現網絡服務 
使用框架: WSO2 W/PHP 
使用php來實現網絡服務 
使用框架: WSO2 W/PHP 
使用php來實現網絡服務 
使用框架: WSO2 W/PHP 
使用php?文章夾雜無數難懂的翻譯以及術語,此處盡量使用口語以及漢語。能來往不是。 WSMessages 這個類別就是在 Web services framework for php (簡稱 WSF)這個開源框架中,用來封裝這兩個訊息的類別。
WSMessages 有一個很重要的變數str來保存訊息內容,以xml格式來保存「有效的載荷」 (他們把這個叫做payload,我查英文字典,就是這個意思,但是它來回的出現,反覆的出現,今觀之,也就是交談內容,實際上就是除去那些xml的定義,以及一些其他的所謂'命名空間' ->namespace的定義而已。有效載荷實在莫名其妙,我以後還是用『交談內容'來指稱它把。 
如果你透過客戶程式傳送一個請求,那麼你需要建構一個 WSMessage 的實例,並且用 xml形式的交談內容填寫好這個實例。對應請求的回應,也還是一個『交談內容』會透過你的程式返回,並且傳回的東西也仍然是一個 WSMessage 實例。 
也就是說,你的客戶端函數掉應一個網路服務,那麼他的回傳值也是一個 WSMessage 實例。 
你可以在一個函數中傳送請求,呼叫網路服務的程序,並且把回傳內容放在 WSMessage實例中,並且讓函數傳回這個 WSMessage實例。 
WSMessage 更傾向於傳送和接受比較複雜的內容例如有附件什麼的。以下就來詳細解釋如何使用 WSMessage 來實現客戶端和服務端的交流。 
處理對話內容: 
在此之前已經講解過如何使用 php來創建網路服務,並且已經做了一個簡單的客戶 -服務端程式來說明工作流程。但是這些程序並沒有深入的解釋我們怎麼處理‘交談內容’。換句話說,我們只是把 xml格式的交談內容傳送到了服務端,但我們並沒有想到要去處理它。在這裡,我們來詳細的解釋如何處理交談內容並且把它用到計算程式中去。 
交談內容是一個商業邏輯定義的內容,並且用 SOAP( Simple Object Access Protocol)來封裝的,(請參閱 SOAP w3c的文章)。讓我們用個例子來說明如何計算一個階乘。 
客戶端需要傳送的交談內容: 
 

 
服務端需要明白這個對話內容並且將變數分辨出來並且計算它的階乘。以下是服務端程式: 
function getFactorial ( $message ) { 
$simplexml = new SimpleXMLElement ( $message -> str ) ; 
$value = $simplexml -> param [ 0 ] ; 
$value = $simplexml -> param [ 0 ] ; ial value,h value ; 
$responsePayloadString =  
$result  
 
XML; '建立了一個simpleXmlElement 的實例。你可以看到,輸入的交談內容被保存到了透過函數參數傳遞進來的 WSMessage 實例 $message的 str變數中。註: SimpleXml是一個 php的擴展,用於處理 xml檔案或字串。 WSO2 WSF/PHP並沒有規定我們必須使用哪一個 php擴充來處理 xml。你可以使用你喜歡的人和 xml php 擴充來處理,像是 domdocument, saxdom之類。 
第 4行將對話內容中的參數值提取出來,這表示服務程式需要知道如何理解這些參數,比如說參數類型之類的東西。 (正常來說需要在交談內容中說明這個參數的類型)。函數中剩下的就是正常的處理階乘。在第六行,階乘透過呼叫其他函數被計算出來。從 8到 12行,回覆的交談內容也被寫好並且準被回傳此內容。第 14行我們回傳回覆的交談內容。
回覆的交談內容應該差不多是這樣的: 
 
720 
 
同樣的,客戶端也可以用同樣的方法處理回覆的內容: = $client -> request ( $reqestPayloadString ) ; 
$simplexml = new SimpleXMLElement ( $response -> str ) ; 
echo "Result = " . $simplexml -> result [ 0 ] . "
" ; 
在第3行,用回覆的對話內容創建了一個回應SimpleXMLElement 實例。同樣的 $response 也是一個 WSMessage的實例,我們可以存取他的成員變數 str,這個變數保存了 xml格式的回應的交談內容。我們把它交給一個 SimpleXMLElement 建構函數,並由此建立一個 SimpleXMLElement的實例。然後我們就可以存取結果元素(或叫節點?element, xml裡面可以稱之為元素,但對於樹狀結構的它來說,節點也不為過?) 
現在你應該學會如何處理交談信息中的內容,不管是客戶端的申請也好還是服務端的回應也好。 
註:在服務端的 getFactorial函數 (14行 ),你可以之間回傳一個 WSmessage而不是一個回應的交談內容。你可以用下面的這一小段程式來實現這個功能。
$outMessage = new WSMessage( $responsePayloadString ); 
return $outMessage ; 
這其實也就是說服務端程式及可以傳回xml格式的對話內容也可以傳回WSMessage的實例 
完整的程式將會在這篇文章完整的程式將在這篇文章完整的程式碼附上。 
追蹤訊息 
透過 WSO2 Web services framework for PHP ,你可以追蹤 SOAP訊息被客戶端發出,然後客戶端又收到了來自服務端的訊息,(即他們的交談內容)。網路客戶服務類, WSClient 有兩個函數可以實現這個目的: getLastReauest()和 getLastResponse()。客戶端在使用 request()這個函數以後,你可以透過這兩個函數去得到交談訊息。
$response = $client -> request ( $reqestPayloadString ) ; 
printf ( "
Request = %s " , 
htmlspecialchars ( $client -> getLastRequest ())) ; br/> Response = %s " , 
htmlspecialchars ( $client -> getLastResponse ())) ; 
以上的程式片段會顯示request()這個函數實作的請求與回應的內容。
實際上,這段程式差不多會輸出這樣的東西: 
Request =

6
 
Response =
720 Envelope> 
追蹤SOAP訊息對於研究呼叫的服務是非常有用的,特別是對於尋找服務和用戶端的bug。比如說,你可以確認所有的客戶端發出的消息以及服務端回复的消息,並且,你可以確認交談內容的格式(客戶端的以及服務端的。 ) 
Debugging(這個詞是如此的普遍,那麼我在這裡就不翻譯它了,儘管我的夢想是有一天程式用中文來寫,顯而易見的是這個夢已經離我們越來越遙遠。 wsf。 你怎麼能確定這個 wsf已經正常運作了?好吧,第一,你可以透過phpinfo() 這個函數來檢查,(如果你不知道這個函數以及怎麼使用它,呃,查查php手冊吧。) 你只需要創建一個php文件,並且在上面寫下這幾句話,然後用個瀏覽器打開它。
phpinfo () ; 
?> 
如果所有的擴充都被正確的安裝的話,你會找到一個項目叫wsf,在一個以wsf作為標題的表裡,你應當看到'wsf support'之類的字樣。這個東東是在php.ini裡定義的,(或者比如說我就沒有在php.ini 裡面定義而是在/etc/php5/conf.d/裡寫了一個新的文件叫做wsf.ini,實際上這個資料夾裡面所有的文件到後來都會被合併到php.ini裡,所有如果你沒有在php.ini裡找到對應的設定但是你的wsf缺能用,你不妨來這裡看看。這個擴這沒有顯示在phpinfo裡,那麼你需要去找安裝指南好好研究一下,如果找不到可以給我發郵件: ferdinandfly@yahoo.ca 
當你成功的安裝了以後,第二個問題就是你好像並不能讓這個例子正確運作。同樣的,你需要檢查一些設定是否正確。 首先是 php.ini記錄中,常常會設定一些日誌檔案的路徑,也許他不存在或是說他設定的路徑 php5無法讀寫。還有,你應到確認 php.ini是否包含了一些腳本文件,而這些腳本文件都是可讀的。 
如果以上的這些都是正確的但是 wsf就是不工作,你可以查看一下日誌檔。日誌檔案會被寫到 wsf.log_path這條記錄所確定的路徑中。這個東東在 php.ini裡進行設定。如果他沒有被設定,那麼 log就在 /tmp裡( linux)。需要知道的是,在 windows平台中,預設的路徑很可能不存在,因此你必須為他指定一個日誌路徑。和服務有關的日誌記錄在 wsf_php_server.log中,和客戶端有關的保存在 wsf_php_client.log中,如果你的客戶機和服務主機不是一台機器,那麼這兩個文件都在伺服器上哦。你可以透過調節記錄的等級來獲得不同詳細程度的日誌檔案。如果是調試,你可以把它設定為 level 4,當然如果是成熟的軟體,你可以設定為 0(只是嚴重錯誤)或是 1(錯誤)。 
如果你想確認來往的交談內容( SOAP)是你所想要的格式的話,你可以用 SOAP 訊息追蹤來調試,正如我們前面所講的。 
總結: 
在這篇文章中,我解釋了 WSMessage這個類別以及怎樣處理交談內容並且使用它,客戶端或服務端都可以透過呼叫 str這個 WSMessage的成員變數來獲得交談內容( xml)。通常交談內容的格式都是透過 WSDL來定義的,因此我們要求客戶端和服務端需要遵守相同的格式是合理的。下一章我們將討論如何透過 WSO2 WSF/PHP和 WSDL協同工作 . 

想要獲取更多的相關文章請關注php中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles