為了改善ComicParty的功能,在研究pLog的功能和MVC模型之餘,不知不覺間開始研究起XMLRPC來,也學寫寫Web Service。
早陣子PEAR XML_RPC出了漏洞,引來大哄動,因為有很多php的應用都了PEAR XML_RPC這個函式庫。幸好pLog是使用另一個較古老的XMLRPC實作-Incutio XML-RPC Library for PHP。
這個又叫IXR_Library的函式庫非常簡單,像我這種初學者也看得懂它的內部構造,是很好的學習教材。不過使用IXR_Library有幾點要注意(感謝markwu的提點):
- IXR_Library並沒有在伺服器回應的xml中標明xml的編碼,所以如果想明顯指定編碼的話,就要在IXR_Server這個類別中加入有關的設定:
- --[找尋]--
- var $capabilities;
- --[之後,加入]--
- var $defencoding = 'utf-8'; XML Target coding只可輸出'ISO-8859-1'、'US_ASCII'和'UTF-8'三種編碼,
- --[找尋]--
- $xml = '<?xml version="1.0"?>'."n".$xml;
- --[修改為]--
- $xml = '<?xml version="1.0" encoding="'.$this->defencoding.'"?>'."n".$xml;
- --[存檔並關閉]--
- IXR_Library裡的IXR_Date類別有幾點寫錯了,將年月日也設定成年份,需要修正:
- --[找尋]--
- --[修改為]--
- 在編寫Server端的Callback函式時,要檢查存入的參數$args是不是陣列,因為如果呼叫Web Service時只傳入一個參數的話,那IXR_Server在呼叫Callback函數時就會直接傳入那個值,而不是以array形式把存入參數包裹起來。
- 客戶端類別IXR_Client裡有個$debug參數,是用來輸出除錯用情報的,只要將它設定為true,客戶端呼叫服務時便會同時顯示送出的資料和收到的回應。






