带有rails和php的Memcache

时间:2012-05-29 11:14:33

标签: php ruby-on-rails serialization memcached marshalling

我正在尝试与我的rails和php服务器共享我的memcache服务器。

滑轨:

my_var = {'one'=>1,'two'=>2}
Rails.cache.write 'hello', PHP.serialize(my_var), :raw => true
Rails.cache.read 'hello'

输出:

"a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2;}"

PHP:

$var = self::$memcache->get('hello');
die(var_dump($var));

输出:

"a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2;}"

PHP.serialize是gem php_serialize的一个函数。 我希望我的PHP服务器可以拾取你好并生成一个数组。谁能帮助我,我在哪里做错了?

谢谢

2 个答案:

答案 0 :(得分:1)

Memcached返回序列化(封送)字符串。要使用实际的数组,首先需要在PHP中反序列化它,就像你必须在Ruby中序列化数组一样。

尝试

$var = unserialize(self::$memcache->get('hello'));
die(var_dump($var));

答案 1 :(得分:0)

PHP的

Serialisation和ruby意味着您将对象转换为文本表示形式,即扁平字符串。在PHP中,这将使用函数serialize完成。要实际拥有传递对象的新实例,您需要从这个文本表示中重新创建它,您需要在PHP unserialize中使用另一个函数

所以在你的情况下像@chiborg所说的那样,使用unserialize会得到你的数组

var_dump(unserialize("a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2;}"));

array(2) {
  ["one"]=>
  int(1)
  ["two"]=>
  int(2)
}