64 ビット サーバーでシリアル化されたオブジェクトを 32 ビット サーバーでシリアル化解除しようとしています。問題をオブジェクト内の整数に分離しました。ここに問題の小さな再現があります。
64 ビット マシンの場合:
$i = serialize('20110510134021'); //i:20110510134021;
32 ビット マシンの場合:
$i = unserialize('i:20110510134021;');
エラーを与える
Notice: unserialize(): Error at offset 0 of 16 bytes
これで、これらのシリアル化方法をクロス システム データ送信に使用すべきではないことがわかりました。ただし、データを別のシステムに移行しようとしているだけで、転送に積極的に使用することはありません。これは 1 回限りのことです。
これは整数オーバーフローが原因である可能性があると思いますが、32ビットサーバーでも次のようなことができます
$i = 20110510134021;
echo $i;
そして、それはうまくいきます。PHP の整数型は double 型などにスケーリングされると思います。しかし、シリアル化を解除するときにそれを行わないのはなぜですか?
これらのオブジェクトのシリアル化を解除するにはどうすればよいですか? できない場合、それらを別のものに変換する方法はありますか? 最後に、PHP 自体で逆シリアル化メソッドを作成した人はいますか? または、プロトコルの詳細はありますか? それを使用して、それらの整数のカスタムケースを作成できます。
ありがとう。
注:元のデータにはアクセスできず、シリアル化された結果のみにアクセスできます。