【问题标题】:POST Uint16Array, work on the array using PHPPOST Uint16Array,使用 PHP 处理数组
【发布时间】:2016-04-06 17:11:52
【问题描述】:

我希望将 JS 中的数组转换为 Uint16Array,使用 AJAX POST,在 PHP 中接收,将 POST 转换为 PHP 数组。

到目前为止:

JS

var data = [];

for(var j = 0; j < 4800; j++) {
  data.push(j);  
}

bytesToSendCount = data.length;

var bytesArray = new Uint16Array(bytesToSendCount);
for (var i = 0, l = bytesToSendCount; i < l; i++) {
  bytesArray[i] = data[i];
}

  $.ajax({
    type: "POST",
    url: "index.php",
    data: bytesArray,
    contentType: 'application/octet-stream',
    processData: false,
    success: function(data){        
    console.log("ok");
    },
    failure: function(errMsg) {
        alert(errMsg);
    }
  });

PHP

$data=file_get_contents('php://input');

如何将 $data 设置为 PHP 数组?也许将其转换为 ascii 字符串,而不是将其转换为数组?

编辑: 这个想法是让数据记录器以 40SPS 工作,并使用移动互联网将数据发送到服务器。发送 JSON 或字符串或二进制文件的问题,它消耗大量数据(每两分钟 24kb),因此使用 Uint16Array(记录器以 16 位工作)将 POST 减少到 ~9kb/2 分钟。

【问题讨论】:

  • 不应该$data = eval($data); 做这个伎俩吗?如果没有,您在$data 中究竟有什么?
  • $data 只是来自 AJAX (Uint16Array) 的帖子,使用 eval 我收到此消息 syntax error, unexpected 'D8APxA' (T_STRING)
  • 嗯?你能做一个 var_dump($data) 并在这里发布这个输出吗?我真的不明白为什么会是 D8APxA 或类似的东西。
  • 没有eval的输出有点大,像这样:��������
  • 不管怎样,我认为你需要在PHP中使用unpack()来解析它。

标签: php arrays binary


【解决方案1】:

在 PHP 中使用 unpack

$array = unpack('n*', $data); // big-endian

$array = unpack('v*', $data); // little-endian

数据是以大端还是小端顺序发送取决于机器。您可能想使用Dataview 以便控制它,然后在 PHP 中使用适当的格式。

【讨论】:

  • 成功了!感谢您指出大/小端。现在我可以访问数组 ex:$array[12]。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多