同时使用rails和php的Memcache

同时使用rails和php的Memcache,php,ruby-on-rails,serialization,memcached,marshalling,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;}" "a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2

我正在尝试与我的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;}"
"a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2;}"
PHP:

输出:

"a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2;}"
"a:2:{s:3:\"one\";i:1;s:3:\"two\";i:2;}"
serialize是gem PHP_serialize中的一个函数。 我希望我的PHP服务器能够接收hello并生成一个数组。谁能帮我一下,我哪里做错了


谢谢

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

试一试

对于PHP和ruby,这里的意思是将对象转换为文本表示形式,即平面字符串。在PHP中,这将通过函数完成。因此,要真正拥有传递对象的新实例,您需要从这个文本表示中重新创建它,您需要PHP中的另一个函数

因此,在您的例子中,如@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)
}

谢谢你的解释。我希望我已将通知设置为我的电子邮件,以便我可以立即接受您的答复。谢谢。就像你说的那样。问题是,我的php是一个遗留代码,我试图不改变那里的任何东西。我希望我能从铁路方面解决一些问题。另一个问题是,在PHP中,$hello=array('one'=>1,'two'=>2);self::$memcache->set('hello',$hello,false,false)$var=self::$memcache->get('hello');模具(var_转储($var))
code
将输出
code
数组(2){[“一”]=>int(1)[“两”]=>int(2)}
code
但是从rails端:
code
rails.cache.read('hello')
code
输出
a:2:{:s:4:\'satu\'i:1;s:3:\'dua\'i:2;}
。那么为什么PHP在这里不序列化呢?这可能与您的PHP类有关。您使用的是PHP类还是memcached扩展?如果您正在使用该类,请尝试了解调用set方法时该类的作用。