我试图反序列化一个 PHP 对象。
警告:unserialize() [function.unserialize]: Node no longer exists in/var/www/app.php on line 42
但是为什么会发生这种情况?
即使我找到了反序列化 simplexml 对象的解决方案,也很高兴知道为什么 php 无法反序列化对象?
我使用这个函数来序列化 simplexml 对象
function serializeSimpleXML(SimpleXMLElement $xmlObj)
{
return serialize($xmlObj->asXML());
}
要反序列化一个 simplexml objetc,我使用这个函数
function unserializeSimpleXML($str)
{
return simplexml_load_string(unserialize($str));
}
最佳答案
SimpleXMLElement 包装了一个 libxml 资源类型。资源无法序列化。在下一次调用时,表示 libxml Node 对象的资源不存在,因此反序列化失败。根本允许您序列化 SimpleXMLElement 可能是一个错误。
您的解决方案是正确的,因为 text/xml 是任何 XML 的正确序列化格式。但是,由于它只是一个字符串,因此实际上没有任何理由序列化 XML 字符串本身。
请注意,这本质上与“内置”PHP 类/对象无关,而是 SimpleXML 的实现细节(我认为是 PHP 5 中的 DOM)。
关于php - 为什么无法序列化 PHP 内置对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992906/