mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-03-01 15:21:02 +03:00
86 lines
2.1 KiB
PHP
86 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* Zend Framework (http://framework.zend.com/)
|
|
*
|
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
*/
|
|
|
|
namespace Zend\Serializer\Adapter;
|
|
|
|
use Zend\Serializer\Exception;
|
|
use Zend\Stdlib\ErrorHandler;
|
|
|
|
class IgBinary extends AbstractAdapter
|
|
{
|
|
/**
|
|
* @var string Serialized null value
|
|
*/
|
|
private static $serializedNull = null;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @throws Exception\ExtensionNotLoadedException If igbinary extension is not present
|
|
*/
|
|
public function __construct($options = null)
|
|
{
|
|
if (!extension_loaded('igbinary')) {
|
|
throw new Exception\ExtensionNotLoadedException(
|
|
'PHP extension "igbinary" is required for this adapter'
|
|
);
|
|
}
|
|
|
|
if (static::$serializedNull === null) {
|
|
static::$serializedNull = igbinary_serialize(null);
|
|
}
|
|
|
|
parent::__construct($options);
|
|
}
|
|
|
|
/**
|
|
* Serialize PHP value to igbinary
|
|
*
|
|
* @param mixed $value
|
|
* @return string
|
|
* @throws Exception\RuntimeException on igbinary error
|
|
*/
|
|
public function serialize($value)
|
|
{
|
|
ErrorHandler::start();
|
|
$ret = igbinary_serialize($value);
|
|
$err = ErrorHandler::stop();
|
|
|
|
if ($ret === false) {
|
|
throw new Exception\RuntimeException('Serialization failed', 0, $err);
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Deserialize igbinary string to PHP value
|
|
*
|
|
* @param string $serialized
|
|
* @return mixed
|
|
* @throws Exception\RuntimeException on igbinary error
|
|
*/
|
|
public function unserialize($serialized)
|
|
{
|
|
if ($serialized === static::$serializedNull) {
|
|
return null;
|
|
}
|
|
|
|
ErrorHandler::start();
|
|
$ret = igbinary_unserialize($serialized);
|
|
$err = ErrorHandler::stop();
|
|
|
|
if ($ret === null) {
|
|
throw new Exception\RuntimeException('Unserialization failed', 0, $err);
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
}
|