0

シリアル化してbase64_encodeし、データベースにスローする大きな2D配列があります。別のページでアレイを引き出しますbase64_decode。シリアル化されたアレイをエコーアウトすると、間違いなく有効に見えます。

ただし、これを実行しようとするunserialize(base64_decode($serializedArray))と、Firefoxがほぼクラッシュするまで同じエラーがスローされます。

エラーは次のとおりです。

警告:unserialize()[function.unserialize]:ノードは24行目の/var/www/dev/wc_paul/inc/analyzerTester.phpに存在しなくなりました

エコーアウトするシリアル化された配列全体を含めますが、前回このフォームでそれを試したときに、Firefoxがクラッシュしました。

なぜこれが起こっているのか誰かが知っていますか?

4

4 に答える 4

5

オブジェクト(DOMNodeなど)ではなく、配列をシリアル化するだけでよろしいですか?リソースのように、すべてのクラスがシリアル化されていないことに満足するわけではありません。DOMの例として(あなたのエラーはあなたが作業していることを私に示唆しています)、すべてのノードはparentNodeへの参照を持っており、ノードがシリアル化されていないときにparentNodeが存在しない場合、それはできませんその参照を再作成すると、問題が発生します。

domツリーをXMLとしてデータベースに保存し、後でロードし直すことをお勧めします。

于 2008-09-23T05:13:25.817 に答える
3

データベースフィールドがシリアル化された配列を保持するのに十分な大きさであることを確認してください。シリアル化されたデータはPHPで非常にスペース効率が悪く、多くのDB(MySQLなど)は長すぎるフィールド値をサイレントに切り捨てます。

于 2008-09-23T05:30:10.673 に答える
0

リソースをシリアル化しないでください。シリアル化することはできません。

Resources@php.net

于 2008-09-23T10:43:51.077 に答える
0

配列内の要素の型は何ですか? serialize/unserialize はビルトイン PHP オブジェクトでは機能せず、通常はそれがエラーの原因です。

また、コメントに基づいて、これは問題ではありませんが、データベースのスペースを節約するために、データをbase64でエンコードせず、エスケープするだけです。つまり、mysql では mysql_real_escape_string を使用します。

于 2008-09-23T05:46:20.573 に答える