function test($type, $variable, $test) { $serialized = msgpack_serialize($variable); $unserialized = msgpack_unserialize($serialized); var_dump($variable); var_dump($unserialized); }
function test() { $serialized = msgpack_serialize(null); $serialized = substr($serialized, 0, -1); $length = mt_rand(1, 255); for ($i = 0; $i < $length; ++$i) { $serialized .= chr(mt_rand(0, 255)); } // if returned null everything is OK $unpacker = new MessagePackUnpacker(); $unpacker->feed($serialized); if ($unpacker->execute()) { if (($unserialized = $unpacker->data()) === null) { return true; } $unpacker->reset(); } else { return true; } // whole data is read? if ($serialized !== msgpack_serialize($unserialized)) { return true; } echo bin2hex($serialized), "\n"; var_dump($unserialized); return false; }
function test($type, $variable, $test = null) { $serialized = msgpack_serialize($variable); $unpacker = new MessagePackUnpacker(); $length = strlen($serialized); $str = ""; $offset = 0; for ($i = 0; $i < $length;) { $len = rand(1, 10); $str .= substr($serialized, $i, $len); if ($unpacker->execute($str, $offset)) { $unserialized = $unpacker->data(); var_dump($unserialized); $unpacker->reset(); $str = ""; $offset = 0; } $i += $len; } if (!is_bool($test)) { echo $unserialized === $variable ? 'OK' : 'ERROR', PHP_EOL; } else { echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL; } }
function test($type, $variable) { $serialized = msgpack_serialize($variable); $unserialized = msgpack_unserialize($serialized); echo $type, PHP_EOL; echo bin2hex($serialized), PHP_EOL; var_dump($unserialized); echo $unserialized === $variable ? 'OK' : 'ERROR', PHP_EOL; }
function test($type, $variable, $test) { $serialized = msgpack_serialize($variable); $unserialized = msgpack_unserialize($serialized); echo $type, PHP_EOL; echo bin2hex($serialized), PHP_EOL; var_dump($unserialized); echo $test || $unserialized === null ? 'OK' : 'FAIL', PHP_EOL; }
function read($id) { global $output; $output .= "read" . PHP_EOL; $a = new Bar(); $b = new Foo($a); $a->set($b); $session = array('old' => $b); return msgpack_serialize($session); }
/** * Serialize PHP value to msgpack * * @param mixed $value * @return string * @throws Exception\RuntimeException on msgpack error */ public function serialize($value) { ErrorHandler::start(); $ret = msgpack_serialize($value); $err = ErrorHandler::stop(); if ($ret === false) { throw new Exception\RuntimeException('Serialization failed', 0, $err); } return $ret; }
/** * 数据编码。 * * @param array $data 指定数据对象。 * @param int $format 指定编码格式。(默认值: 1 | JSON, 其它可用值: Encoder::MSGPACK, Encoder::XML) * @param int $options 指定参数选项。(注: 此参数仅对 JSON 编码有效.) * @return string * @throws NotImplementedException */ static function encode($data, $format = self::JSON, $options = 320) { $s = false; switch ($format) { case self::JSON: $s = json_encode($data, $options); break; case self::MSGPACK: $s = msgpack_serialize($data); break; case self::IGBINARY: $s = igbinary_serialize($data); break; case self::XML: throw new NotImplementedException('尚未实现此接口。', -1); break; } return $s; }
function test() { $serialized = msgpack_serialize(null); $serialized = substr($serialized, 0, -1); $length = mt_rand(1, 255); for ($i = 0; $i < $length; ++$i) { $serialized .= chr(mt_rand(0, 255)); } // if returned null everything is OK if (($unserialized = msgpack_unserialize($serialized)) === null) { return true; } // whole data is read? if ($serialized !== msgpack_serialize($unserialized)) { return true; } echo bin2hex($serialized), "\n"; var_dump($unserialized); return false; }
function test($type, $variable, $test = null) { $serialized = msgpack_serialize($variable); global $unpacker; $length = strlen($serialized); for ($i = 0; $i < $length;) { $len = rand(1, 10); $str = substr($serialized, $i, $len); $unpacker->feed($str); if ($unpacker->execute()) { $unserialized = $unpacker->data(); var_dump($unserialized); $unpacker->reset(); } $i += $len; } if (!is_bool($test)) { echo $unserialized === $variable ? 'OK' : 'ERROR', PHP_EOL; } else { echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL; } }
<?php if (!extension_loaded('msgpack')) { dl('msgpack.' . PHP_SHLIB_SUFFIX); } $datas = array(87817, -1, array(1, 2, 3, "testing" => 10, "foo"), true, false, 0.187182, "dakjdh98389", null, (object) array(1, 2, 3)); error_reporting(0); foreach ($datas as $data) { $str = msgpack_serialize($data); $len = strlen($str); for ($j = 0; $j < 200; $j++) { for ($i = 0; $i < $len - 1; $i++) { $sub = substr($str, 0, $i); $sub .= mcrypt_create_iv(30, MCRYPT_DEV_URANDOM); $php_errormsg = null; $v = msgpack_unserialize($sub); } } }
<?php if (!extension_loaded('msgpack')) { dl('msgpack.' . PHP_SHLIB_SUFFIX); } $closure = function ($x) { return $x + 1; }; class Foo implements Serializable { public function serialize() { echo "Should not be run.\n"; } public function unserialize($str) { echo "Should not be run.\n"; } } $array = array($closure, new Foo()); try { $ser = msgpack_serialize($array); echo "Serialized closure.\n"; $unser = msgpack_unserialize($ser); echo "Unserialized closure.\n"; var_dump($unser); } catch (Exception $e) { echo "Got exception.\n"; }
/** */ public function pack($data) { return msgpack_serialize($data); }
<?php class test { } print_r(msgpack_unserialize(msgpack_serialize(new test())));
} class Foo { public $parent; public $children; public function __construct() { $this->parent = null; $this->children = array(); } public function addChild(Foo $obj) { $this->children[] = $obj; $obj->setParent($this); } public function setParent(Foo $obj) { $this->parent = $obj; } } $obj1 = new Foo(); for ($i = 0; $i < 10; $i++) { $obj = new Foo(); $obj1->addChild($obj); } $o = msgpack_unserialize(msgpack_serialize($obj1->children)); foreach ($obj1->children as $k => $v) { $obj_v = $v; $o_v = $o[$k]; echo gettype($obj_v), " ", gettype($o_v), PHP_EOL; }
$profiling = $t->getProfiling(); unset($t); $igbinary_pack += $profiling[1]['diff']; $igbinary_unpack += $profiling[2]['diff']; $igbinary_size += strlen($pack); if ($unpack === $value || is_object($value) && $unpack == $value) { $igbinary_status = 'OK'; } } //msgpack $pack = null; $unpack = null; $t = new Benchmark_Timer(); $t->start(); for ($i = 0; $i < $loop; $i++) { $pack = msgpack_serialize($value); } $t->setMarker('msgpack_serialize'); for ($i = 0; $i < $loop; $i++) { $unpack = msgpack_unserialize($pack); } $t->stop(); //$t->display(); $profiling = $t->getProfiling(); unset($t); $msgpack_pack += $profiling[1]['diff']; $msgpack_unpack += $profiling[2]['diff']; $msgpack_size += strlen($pack); if ($unpack === $value || is_object($value) && $unpack == $value) { $msgpack_status = 'OK'; }
<?php $data_array = array(); for ($i = 0; $i < 5000; $i++) { $data_array[mcrypt_create_iv(10, MCRYPT_DEV_URANDOM)] = mcrypt_create_iv(10, MCRYPT_DEV_URANDOM); } $time_start = microtime(true); for ($i = 0; $i < 4000; $i++) { $s = msgpack_serialize($data_array); $array = msgpack_unserialize($s); unset($array); unset($s); } $time_end = microtime(true); if ($time_end <= $time_start) { echo "Strange, {$i} iterations ran in infinite speed: {$time_end} <= {$time_start}", PHP_EOL; } else { $speed = $i / ($time_end - $time_start); printf("%d iterations took %f seconds: %d/s (%s)\n", $i, $time_end - $time_start, $speed, $speed > 400 ? "GOOD" : "BAD"); }
<?php class Demo extends ArrayObject { } $obj = new StdClass(); $demo = new Demo(); $demo[] = $obj; $demo[] = $obj; $data = array($demo, $obj, $obj); print_r(msgpack_unserialize(msgpack_serialize($data)));
public function testUnserialize0() { $expected = 0; $value = msgpack_serialize($expected); $data = $this->adapter->unserialize($value); $this->assertEquals($expected, $data); }
<?php $data = array(); $tmp =& $data; for ($i = 0; $i < 1024; $i++) { $tmp[] = array(); $tmp =& $tmp[0]; } $newdata = msgpack_unserialize(msgpack_serialize($data)); var_dump($newdata == $data);