2008-10-14 46 views
1

我們有一位客戶試圖用PHP代碼調用我們用C#編寫的Web服務。 Web服務調用需要很長的參數。使用長參數從PHP調用C#Web服務

此調用適用於從C#或Java調用的其他客戶,但該客戶從調用返回錯誤。我沒有調試過他們的具體調用,但我猜測64位整數正在從PHP中以某種方式截斷。客戶說他們只是用一個字符串進行Web服務調用,但是在PHP中有一個包裝類型來進行類型轉換。這可能會丟失號碼信息嗎?

感謝您的任何信息。

回答

1

大多數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. 

不知道他的執行細節,很難假定什麼好的解決辦法/解決方法可能是。

0

如果您絕對必須採用這樣的大數字,請將其設置爲一個字符串,然後在您的Web服務中將其轉換爲long。

這會讓您的其他用戶感到困擾,但會讓您的PHP使用者更加友好。