2016/02/08PHPの関数「unserialize」でエラーが発生する場合の対処方法です。久しぶりにドツボにはまりました。「serialize」で処理されたデータについて「unserialize」で元に戻そうとしたのですが、どうしてもエラーになってしまいます。bytes私のケースでは、FuelPHPでユーザ管理のモデルを作成し、プロフィールフィールドにデータを格納したときのお話です。拡張性を持たせたテーブルのプロフィールフィールドは、1つのカラムに配列をシリアライズしたデータを格納します。そのデータをSQLで取り出し、「unserialize」した時にエラーになってしまうのです。ちなみに、現象が発生した環境は以下の通りです。5.5ネットで調べてみると、似たような現象がちらほら見受けられます。基本的に、アンシリアライズする前のデータをデコードするという手法です。1つ目に、関数「base64_decode」を使用した方法。unserialize(base64_decode($data));ダメです。2つ目に、関数「trim」を使用してトリムした方法。unserialize(trim($data));ダメです。3つ目に、シリアライズされた文字列を置換する方法。いくつかパターンあるようです。$data);unserialize($data2);どちらもダメです。4つ目に、一旦UTF8にエンコードしてみる方法。unserialize(utf8_encode($data));unserialize(utf8_decode($data));エンコードでもデコードでも変わらず。5つ目に、関数「stripslashes」を使用した方法。unserialize(stripslashes($data));ダメです。6つ目に関数「html_entity_decode」を使用した方法。unserialize(html_entity_decode($data));通った!エラーが発生しなくなりました!今回はFuelPHPのモデルで拡張カラム「profile_fields」にシリアライズしたデータを登録した場合の解決方法でした。データを渡す際に「htmlentities」を実行したり、サーバの設定やPHP、FuelPHPの設定も見直してみましたが改善されませんでした。取り出す際に「html_entity_decode」は必要なようです。「unserialize」でエラーが発生する事象は少なくないようで、多くのページがヒットしました。上に挙げた解決方法はどれも間違いではなく、実際に解決したケースが紹介されています。今回、私の場合は「6つ目」が正解でした。ハマりやすそうな問題、かつ、無駄に時間を浪費しそうな問題です。知識として片隅に置いておきたいです。リックテレコムプログラミングは全く初めての人、他の入門書で挫折しちゃった人、つまづく所はみんな同じです。そこを徹底分析したメソッドで、全員ゴールに辿り着ける入門教室が秋葉原にあります。1日でWeb画面と簡単なDBまで作れるようになるとってもユニークな速習コース。その方法を1冊に凝縮した本書なら、いきなりの初心者でも、無理せず楽しくPHPとMySQLのエッセンスを習得できます。ソーテック社FuelPHPでのフレームワーク開発を基礎から解説!役立つコアクラスとパッケージを徹底詳解!自由に使えるサンプルプログラムで実例をあげながら解説!Webアプリ開発の効率を大幅アップ!統合開発環境でOS問わず開発可能。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。inc.Profileサイト「helog」は私がWeb制作に携わるなかでの経験を中心に記しています。前にも発生したんだよなぁ。」といった無駄な時間を省くことを目的に書き始めました。「へ」の「ログ」です。個人的な技術メモのようなものですが、みなさんの何か役に立つことがあればこの上ないです。