Nó já não existe usando SimpleXML

Tentando armazenar em cache um arquivo xml usando a construção na function wordpress chamada get_transient, mas estou recebendo um erro php:

unserialize () [function.unserialize]: o nó já não existe

//check the db to see if it exists ( get_transient is a WordPress function) if (false === ($response_xml = get_transient('stats_from_xml_feed'))){ $request_url = "http://example.com/feed.xml"; $request_url = urlencode($request_url); $response_xml = @simplexml_load_file($request_url); //kill request if connection problem if ($response_xml === FALSE){ exit ('could not connect'); } else { // here we throw it into the WordPress temp DB using set_transient for 12 hours set_transient('stats_from_xml_feed', $response_xml, 60*60*12); //some output $res = $response_xml; $name = $res->name; echo $name; } 

Seu $response_xml é uma instância da class SimpleXMLElement . Um SimpleXMLElement não deve ser (não) serializado, porque envolve um recurso dentro do object.

Em vez disso, serialize algo que felizmente sobreviverá ao processo; a resposta bruta do feed, tudo / parte do XML depois de carregá-lo no SimpleXMLElement e usando o método asXML() , uma matriz dos valores (string provável) que deseja ou alguma outra estrutura que esteja bem serializada.

Uma coisa a considerar é que você verá o unserialize(): Node no longer exists aviso em versões “antigas” (para usar o termo vagamente) do PHP. A partir do PHP 5.3.2, o comportamento mudou para lançar uma Exception com a mensagem Serialization of 'SimpleXMLElement' is not allowed .

Você não deve (não pode?) serialize e unserialize o object SimpleXML. É XML, que é um formato de serialização para começar. Este não é o início aqui!

Ligue para o método asXML para obter o XML real e, em seguida, armazene isso.