ホームページ >バックエンド開発 >PHPチュートリアル >PHP シリアル化長不一致エラーを修復するにはどうすればよいですか?

PHP シリアル化長不一致エラーを修復するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 22:21:10918ブラウズ

How to Repair PHP Serialization Length Mismatch Errors?

PHP のシリアル化長が一致していませんか?修復方法は次のとおりです

問題:

シリアル化された文字列に対して PHP の unserialize() 関数を使用すると、エラーが発生します:

unserialize() [function.unserialize]: Error at offset

原因:

このエラーは通常、これは、シリアル化された文字列のバイト カウントの長さが間違っていることが原因で、無効なデータが生成されます。

解決策:

これを修正するには、シリアル化された配列の長さを再計算します。次の要素:

  1. preg_replace() を使用してシリアル化されたデータを変更し、長さ:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
  1. これで、アンシリアライズはエラーなしで修正されたデータを処理するはずです。

今後の問題の防止:

1.シリアル化されたデータの検証:

findSerializeError() のような関数を使用して、シリアル化されたデータ セグメント内のエラーを識別して特定します。

2.代替ストレージ方法:

より安全で信頼性の高いストレージを実現するには、base64 エンコードとデコードを使用してシリアル化されたデータを保存および取得することを検討してください。これにより、バイトと文字が適切に処理されます。

例:

// Save to database
$toDatabase = base64_encode(serialize($data));

// Retrieve from database
$fromDatabase = unserialize(base64_decode($data));

追加のヒント:

  • 確認シリアル化されたデータでは一重引用符と二重引用符を適切に使用してください。
  • の使用を検討してください。特殊文字を処理するには、シリアル化する前に addlashes() などのサニタイズ関数を使用します。
  • array_walk() を利用して、サニタイズ関数を配列要素に再帰的に適用します。
  • UTF 文字の場合は、array_map("utf8_encode", を使用します) $array) をシリアル化する前に、array_map("utf8_decode", $array) をシリアル化する前にアンシリアル化。

以上がPHP シリアル化長不一致エラーを修復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。