Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中使用Memcached中存储的php数组_Javascript_Php_Arrays_Node.js_Memcached - Fatal编程技术网

Javascript 在node.js中使用Memcached中存储的php数组

Javascript 在node.js中使用Memcached中存储的php数组,javascript,php,arrays,node.js,memcached,Javascript,Php,Arrays,Node.js,Memcached,在我的web应用程序中,我将一些信息保存在数组中,并将数组保存在Memcached中 现在我需要在node.js长轮询服务器中使用这个数组。使用module for node.js,当我像预期的那样尝试获取数组时,它是不可读的 在将数组保存到Memcached之前,我已尝试序列化该数组。它正确地显示了PHP中的字符串,但在我尝试从telnet和node.js获取二进制数据时,它仍然显示二进制数据 使用以下命令存储阵列: $MC->set($identifier.':user:info',j

在我的web应用程序中,我将一些信息保存在数组中,并将数组保存在Memcached中

现在我需要在node.js长轮询服务器中使用这个数组。使用module for node.js,当我像预期的那样尝试获取数组时,它是不可读的

在将数组保存到Memcached之前,我已尝试序列化该数组。它正确地显示了PHP中的字符串,但在我尝试从telnet和node.js获取二进制数据时,它仍然显示二进制数据

使用以下命令存储阵列:

$MC->set($identifier.':user:info',json_encode($from_db),1296000);
来自数据库的
$的变量转储

string(417) "{"id":"1",
"username":"XXX",
"password":"XXX",
"email":"XXX",
"joined":"2014-05-06 22:52:12",
"ip":"XXX",
"rank":"XXX",
"reputation":"XXX",
"profile_update_visibility":"0",
"friends_visibility":"0",
"discussions_visibility":"0",
"private_discussions_visibility":"3",
"message_permission":"0",
 "hashed_username":"XXX"}"
echo$MC->get(“1:user:info”)显示正确的JSON:

{"id":"1","username":"XXX","password":"XXX","email":"XXX","joined":"2014-05-06 22:52:12","ip":"XXX","rank":"XXX","reputation":"XXX","profile_update_visibility":"0","friends_visibility":"0","discussions_visibility":"0","private_discussions_visibility":"3","message_permission":"0","hashed_username":"XXX"}
然而,telnet和node.js显示:

|l���sqD�R���l��S/�3XKX�����*�z�B�J�ڊ'��
���hf]��1�w�IJY�P)M��T=�Jk����TgdJъ����n���u%�/S&�٭���x�{3����I�^�^��y�lJH'/
,��cj����\���J��bĉOa��鑞1�?>�J��LM'�jRm�5�1�kE�jS|~��l                       �]���,�]��cǝݖ������px�;

Memcached在PHP中对数组的内部序列化在这里起作用了吗?我的选项是什么?

问题是您的字符串被压缩存储

Memcached库存储长度超过某个阈值时压缩的项

您可以使用
Memcached::OPT_COMPRESSION=FALSE
以禁用压缩

在Node.js代码中,可以使用JSON.parse将值转换为对象:

memcached.gets('1:user:info', function (err, data) {
    console.log(JSON.parse(data["1:user:info"]));
});
对于您的测试示例,Node.js中的结果将是:

{ id: '1',
  username: 'XXX',
  password: 'XXX',
  email: 'XXX',
  joined: '2014-05-06 22:52:12',
  ip: 'XXX',
  rank: 'XXX',
  reputation: 'XXX',
  profile_update_visibility: '0',
  friends_visibility: '0',
  discussions_visibility: '0',
  private_discussions_visibility: '3',
  message_permission: '0',
  hashed_username: 'XXX' }

使用
JSON\u encode()
@GergoErdosi将数组存储为JSON格式的字符串。PHP正确地显示了JSON,但是telnet和node.js仍然显示二进制数据。你能给我们看一下你的代码吗,这样我们就可以了解你在做什么了?另外,显示PHP数组和您得到的结果将非常有帮助。@ChristianP更新了问题….但是,
Memcached
的set方法中不存在flag参数,目前我使用的是
Memcached
对象,而不是Memcache。我认为将Memcached选项Memcached::OPT_COMPRESSION设置为off也会有同样的效果?是的,将Memcached::OPT_COMPRESSION设置为FALSE就可以了。谢谢并确保编辑您的答案@阿披实对我的误解表示抱歉。修正了我的答案以匹配您的问题:)