使用PHP SDK時出現Checksum mismatch異常

更新時間:
Copy as MD

Windows系統中使用Tablestore PHP SDK時出現Checksum mismatch異常,通常是因為PHP版本低於7.0,在Windows上等效於32位運行環境。升級到PHP 7及以上的64位版本即可解決。

問題現象

Windows系統中使用PHP 5.6運行Tablestore PHP SDK時,拋出以下異常:

Fatal error: Uncaught exception 'AliyunOTSOTSClientException' with message 'Checksum mismatch. expected:120,actual:-48'

可能原因

這是PHP生態的已知限制,並非SDK缺陷。Tablestore內部使用64位整型。在32位運行環境下——即CPU、作業系統、Web伺服器和PHP二進位檔案均為32位的組合——PHP只能以string類型表示64位整型,導致校正和計算結果不正確。

Windows系統中,PHP 7之前的版本並非真正的64位,即使底層作業系統是64位也不例外。

解決方案

警告

Tablestore不支援32PHP。在Windows系統中,這意味著PHP 7之前的版本均不受支援。

升級到PHP 7及以上的64位版本。運行phpinfo(),在輸出中查看Architecture欄位,即可確認當前PHP的架構類型:

  • ArchitectureX86:當前PHP32位版本,需升級到PHP 7及以上的64位版本。

  • ArchitectureX64:當前PHP已支援64位整型,問題不在於架構,需排查其他原因。