2013/08/31

SOAP 在 Windows 與 Linux 上的不同行為

前些日子做了一個專案,過程中有用到 SOAP 去呼叫遠端的 Web Service。
當我把程式寫完並在自己的機器上測試通過後,佈署到客戶租用的虛擬主機上時,卻發現程式不能正常執行。
後來追蹤後發現 PHP 的 SOAP 模組,在不同平台上的行為會不一樣~

其差異點如下:
  • 在 Windows 下,執行 SoapClient::__soapCall 時,$arguments 要多包一層 array
    • 也就是說,如果在 Linux 下,$arguments 是 $data 的話;在 Windows 下要改為 array(&$data)

  • 在 Windows 下,執行 SoapClient::__soapCall 的返回值是 array 結構;而在 Linux 下則是 object 結構
    • 這部分的差異,可以參考這裡,用 objectToArray 函數來統一轉成 array 結構