我們有一位客戶試圖用PHP代碼調用我們用C#編寫的Web服務。 Web服務調用需要很長的參數。使用長參數從PHP調用C#Web服務
此調用適用於從C#或Java調用的其他客戶,但該客戶從調用返回錯誤。我沒有調試過他們的具體調用,但我猜測64位整數正在從PHP中以某種方式截斷。客戶說他們只是用一個字符串進行Web服務調用,但是在PHP中有一個包裝類型來進行類型轉換。這可能會丟失號碼信息嗎?
感謝您的任何信息。
我們有一位客戶試圖用PHP代碼調用我們用C#編寫的Web服務。 Web服務調用需要很長的參數。使用長參數從PHP調用C#Web服務
此調用適用於從C#或Java調用的其他客戶,但該客戶從調用返回錯誤。我沒有調試過他們的具體調用,但我猜測64位整數正在從PHP中以某種方式截斷。客戶說他們只是用一個字符串進行Web服務調用,但是在PHP中有一個包裝類型來進行類型轉換。這可能會丟失號碼信息嗎?
感謝您的任何信息。
大多數PHP安裝將不支持64位整數 - 32是最大值。您可以通過讀取PHP_INT_SIZE常量(4 = 32位,8 = 64位)或讀取PHP_INT_MAX值來檢查。
<?php
echo PHP_INT_SIZE, "\n", PHP_INT_MAX;
?>
如果他是使用Web服務類試圖類型轉換爲64位整數的字符串表示,那麼是的,它是最有可能被截斷或轉換成浮動。您可以排序看到此行爲與這個簡單的測試
<?php
echo intval("123456789");
// prints 2147483647, the max value for a 32 bit signed int.
不知道他的執行細節,很難假定什麼好的解決辦法/解決方法可能是。
如果您絕對必須採用這樣的大數字,請將其設置爲一個字符串,然後在您的Web服務中將其轉換爲long。
這會讓您的其他用戶感到困擾,但會讓您的PHP使用者更加友好。
PHP野蠻地殺害了它的整數支持,直到你沒有可預見的方式知道它的具體安裝將處理32位或64位整數。
處理這個問題的最簡單方法是公開一個接受字符串的新端點,並將其轉換到最後。
有關PHP的史詩參考失敗:
我寫了一封關於使用的NuSOAP調用C#Web服務PHP的文章......還沒有遇到長整型轉換的問題,但我肯定會進行一些測試,看看我是否應該將其添加到我的文章中。謝謝,肖恩 http://seanmcilvenna.com/blog/7-general/24-windows-php-development