使用php來實現網路服務
以下文的翻譯名稱對照表:
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的文章)。讓我們用個例子來說明如何計算一個階乘。
客戶端需要傳送的交談內容:
6
服務端需要明白這個對話內容並且將變數分辨出來並且計算它的階乘。以下是服務端程式:
function getFactorial ( $message ) {
$simplexml = new SimpleXMLElement ( $message -> str ) ;
$value = $simplexml -> param [ 0 ] ;
$value = $simplexml -> param [ 0 ] ; ial value,h value ;
$responsePayloadString =
XML; '建立了一個simpleXmlElement 的實例。你可以看到,輸入的交談內容被保存到了透過函數參數傳遞進來的 WSMessage 實例 $message的 str變數中。註: SimpleXml是一個 php的擴展,用於處理 xml檔案或字串。 WSO2 WSF/PHP並沒有規定我們必須使用哪一個 php擴充來處理 xml。你可以使用你喜歡的人和 xml php 擴充來處理,像是 domdocument, saxdom之類。
第 4行將對話內容中的參數值提取出來,這表示服務程式需要知道如何理解這些參數,比如說參數類型之類的東西。 (正常來說需要在交談內容中說明這個參數的類型)。函數中剩下的就是正常的處理階乘。在第六行,階乘透過呼叫其他函數被計算出來。從 8到 12行,回覆的交談內容也被寫好並且準被回傳此內容。第 14行我們回傳回覆的交談內容。
回覆的交談內容應該差不多是這樣的:
同樣的,客戶端也可以用同樣的方法處理回覆的內容: = $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 =
Response =
追蹤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)!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
