Windows 上で Tablestore SDK for PHP を使用中に「Checksum mismatch」エラーが表示される場合は、PHP 7 より前のバージョン(実質的に Windows 上では 32 ビット)を使用している可能性があります。この問題を解決するには、64 ビット版の PHP 7 以降にアップグレードしてください。
問題の説明
Windows 上で PHP 5.6 を使用して Tablestore SDK for PHP を実行すると、次のエラーが発生します。
Fatal error: Uncaught exception 'AliyunOTSOTSClientException' with message 'Checksum mismatch. expected:120,actual:-48'
原因
これは SDK のバグではなく、PHP エコシステムに存在する既知の制限です。Tablestore は内部で 64 ビット整数を使用しています。CPU、OS、Web サーバー、および PHP バイナリからなる 32 ビットプラットフォーム上では、PHP が 64 ビット整数を文字列としてしか表現できず、チェックサム計算の結果が不正確になります。
Windows では、PHP 7 より前のバージョンは、基盤となる OS が 64 ビットであっても、実際には 64 ビットではありません。
ソリューション
警告: Tablestore は 32 ビット版 PHP をサポートしていません。Windows では、PHP 7 より前のバージョンはサポート対象外となります。
64 ビット版の PHP 7 以降にアップグレードしてください。パフォーマンスを最適化するため、PHP 7 の使用を推奨します。現在使用している PHP のアーキテクチャを確認するには、phpinfo() を実行し、出力内の Architecture フィールドを確認します。
Architecture: X86 — PHP が 32 ビットです。64 ビット版の PHP 7 以降にアップグレードしてください。
Architecture: X64 — PHP はすでに 64 ビット整数をサポートしています。この場合、問題は他の要因に起因しています。