Попытка кэшировать xml-файл, используя встроенную функцию wordpress, называемую get_transient, но я получаю ошибку php:
unserialize () [function.unserialize]: Узел больше не существует
//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; }
Ваш $response_xml
является экземпляром класса SimpleXMLElement
. SimpleXMLElement
не должен быть (un) сериализован, потому что он обертывает ресурс внутри объекта.
Вместо этого сериализуйте что-то, что с удовольствием выдержит процесс; исходный ответ из фида, все / часть XML после его загрузки в SimpleXMLElement
и использование asXML()
, массив asXML()
значений (вероятная строка) или какая-либо другая структура, которая может быть сериализована.
Следует учитывать, что вы увидите unserialize(): Node no longer exists
предупреждений в «более старых» (для использования термина «свободно») версий PHP. Начиная с PHP 5.3.2, поведение, измененное для Exception
с сообщением Serialization of 'SimpleXMLElement' is not allowed
.
Вы не должны (не можете?) serialize
и unserialize
объект SimpleXML. Это XML, для начала это формат сериализации. Это не начало!
Вызовите метод asXML
чтобы получить фактический XML, а затем сохраните его.