あと2日!
- shin
- ryuzi_kambe
- LIND
- studio15
- akky
以前のAA-Camp参加者のkambeさんが今回シリーズ初参加。一日で二つのサイトを完成させた。新聞製造機と座席占い。
[関連]
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するように変更しよう。
本日の参加者。空前の大人数。
今日はブロガー(非プログラマー)も数名参加して、MT再構築したり再構築したりはたまた再構築したりしてる人もいました。
昼はサイゼリア、夜は四川料理。その他におやつの差し入れがいっぱい。
[関連]