2013-06-05 87 views
0

我們正在使用支付API,向我們發送客戶令牌ID,然後我們可以訪問API上的個人數據。PHP /服務器無法處理大量數據?

客戶令牌ID的一個例子是9253691936959900,然而PHP將它轉換爲9.2536919369599E + 15(例如)。顯然9.2536919369599E + 15是一種科學記數法,對我們來說我們用它來調用API是沒有用的。

我們已經嘗試過各種轉換,如number_format(9.2536919369599E + 15,16),但沒有喜悅。

我們使用的是32位服務器和PHP 5.4.15。

我們已經用盡了幾乎所有的選項,甚至API的開發者都在努力看到這個問題。他們肯定客戶令牌ID是作爲字符串發送的,但由於某種原因,我們的系統將其解釋爲整數並將其轉換爲科學記數法。

任何幫助或建議將不勝感激。

由於一百萬:)

+1

你可以嘗試迫使它字符串時,PHP臨危值即是$ var =(string)$ var2; – Martin

+0

@Martin它已經在$ var2中轉換爲科學記數法,所以實際上您正在投射$ var2的科學記數法演示而不是大整數。 – bolbol

+0

@bolbol發送時是否可以不投射字符串而不是接收時?還是現在還沒有註釋? – Martin

回答

2

PHP被限制爲最大整數是2^63-1 = 9223372036854775807(這是64位的平臺。其他平臺可以比這少得多)。

任何大於max的數字將被轉換爲浮點數。

您有幾種選擇:

  1. 的ID使用字符串。
  2. 使用數字小於2^63
  3. 使用PHP GMP library
-1

如果你的API提供者返回JSON格式的關鍵:

$key = '{"key":999999999999999999999999999999999999999999999999999999}' ; 
$a = json_decode($key, true, 2 , JSON_BIGINT_AS_STRING); 

print $a['key']; 

上面打印的結果是:999999999999999999999999999999999999999999999999999999

+0

我很高興知道爲什麼答覆得到反對票。 – bolbol