null, ); /** * Constructor * * @param array $opts * @return void * @throws Zend_Serializer_Exception if wddx extension not found */ public function __construct($opts = array()) { if (!extension_loaded('wddx')) { require_once 'Zend/Serializer/Exception.php'; throw new Zend_Serializer_Exception('PHP extension "wddx" is required for this adapter'); } parent::__construct($opts); } /** * Serialize PHP to WDDX * * @param mixed $value * @param array $opts * @return string * @throws Zend_Serializer_Exception on wddx error */ public function serialize($value, array $opts = array()) { $opts = $opts + $this->_options; if (isset($opts['comment']) && $opts['comment']) { $wddx = wddx_serialize_value($value, (string)$opts['comment']); } else { $wddx = wddx_serialize_value($value); } if ($wddx === false) { $lastErr = error_get_last(); require_once 'Zend/Serializer/Exception.php'; throw new Zend_Serializer_Exception($lastErr['message']); } return $wddx; } /** * Unserialize from WDDX to PHP * * @param string $wddx * @param array $opts * @return mixed * @throws Zend_Serializer_Exception on wddx error */ public function unserialize($wddx, array $opts = array()) { $ret = wddx_deserialize($wddx); if ($ret === null) { // check if the returned NULL is valid // or based on an invalid wddx string try { $oldLibxmlDisableEntityLoader = libxml_disable_entity_loader(true); $dom = new DOMDocument; $dom->loadXML($wddx); foreach ($dom->childNodes as $child) { if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { require_once 'Zend/Serializer/Exception.php'; throw new Zend_Serializer_Exception( 'Invalid XML: Detected use of illegal DOCTYPE' ); } } $simpleXml = simplexml_import_dom($dom); libxml_disable_entity_loader($oldLibxmlDisableEntityLoader); if (isset($simpleXml->data[0]->null[0])) { return null; // valid null } $errMsg = 'Can\'t unserialize wddx string'; } catch (Exception $e) { $errMsg = $e->getMessage(); } require_once 'Zend/Serializer/Exception.php'; throw new Zend_Serializer_Exception($errMsg); } return $ret; } }