SimpleXMLElementをunserializeするとエラーになる

simplexmlで取得したオブジェクトをシリアライズしても、元に戻せない。

$gottenItems = simplexml_load_file($serviceUrl);
$hoge = unserialize(serialize($gottenItems));

エラーはこれ

Warning: unserialize() [function.unserialize]: Node no longer exists in *.php on line *

simplexml_load_stringのマニュアルのコメントでも回避策とか提案されている。

なんでこんなエラーに出会ったかというと、symfonyの関数キャッシュを使おうとしたら、対象の関数の返すのがsimplexml_load_file()の返すオブジェクトそのままだったからで、symfonyの中でエラーになった。

以下のコードは、検索結果をファイルにキャッシュする関数をsymfonyで書いたもの。symfonyのキャッシュフォルダ以下に生成させることで、キャッシュコントロールをsymfony管理下に置いている。

public static function search($words, $offset = 0, $results = 10) {
	$function_cache_dir = sfConfig::get('sf_cache_dir').'/mysearch';
	$fc = new sfFunctionCache($function_cache_dir);
	$results = $fc->call('doSearch', $words, $offset, $results);
	return $results;
}

コメントにあった回避策取るよりは、そもそもシリアライズするポイントが間違ってる、ということかなと。

XMLのままキャッシュに入れるか、SimpleXMLElementから必要なものを取り出してその配列やオブジェクトをserializeするように変更しよう。

[AA-Camp] 開発会6日目レポート

開発会AA-Camp6日目。今日は会社によっては仕事始めだったこともあり、昨日の11人よりは少なく7人の参加。

以前に参加されてたお二人が、今回のAA-Camp#6シリーズでは初登場。あとで読むサイドフィード赤松さんと、あとで行くの石原さん(最近の作品は外国人に漢字名を教えてあげる英語サービスKanji-Fandom)。「あとで書く」ogijunさんが今日来てなかったのは残念だ(笑)。

僕はsymfonyの勉強。ドキュメント読んでると眠くなってしまい昼寝とか。

昼はお粥のおいしい中華、夜は前と別のインドカレー

[AA-Camp] 開発会5日目レポート

本日の参加者。空前の大人数。

今日はブロガー(非プログラマー)も数名参加して、MT再構築したり再構築したりはたまた再構築したりしてる人もいました。

昼はサイゼリア、夜は四川料理。その他におやつの差し入れがいっぱい。

[関連]

AA-Camp#6参加します

いい感じ: ロールケーキのライフハック:AA-Campで得た知識


AA-Camp #5 フォトアルバムをEye-fiで。

[を] 日帰り開発合宿の五日目に参加

PINKMAC – 2008年の幕開けもAA-Camp