我正在尝试与我的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服务器可以拾取你好并生成一个数组。谁能帮助我,我在哪里做错了?
谢谢
答案 0 :(得分:1)
Memcached返回序列化(封送)字符串。要使用实际的数组,首先需要在PHP中反序列化它,就像你必须在Ruby中序列化数组一样。
尝试
$var = unserialize(self::$memcache->get('hello'));
die(var_dump($var));
答案 1 :(得分:0)
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)
}