私は公式のMsgPackバージョン(http://msgpack.org/)を使用しています。これはサーバー側にPHP 7用にインストールされ、クライアント(任意のブラウザ)にライブラリ(msgpack.js)として含まれています。ブラウザでmsgpackで簡単ArrayBufferを詰めることができ:パックされた[129、164、110、97、109、101、196、5、118、97、108、117、:PHPとJavascriptの間のMsgpack
function s2b (s) {
var b = new Uint8Array(s.length);
for (var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
if (c > 255) throw new Error("Wide characters are not allowed");
b[i] = c;
}
return b;
}
var test = { 'name': s2b('value').buffer };
console.log('packed', new Uint8Array(msgpack.pack(test)));
、ここでは、コンソール出力であります101]
'value'のASCIIコードの前には、196(データの種類はArrayBuffer)と5(ArrayBufferデータの長さ)の2つの追加のmspackフラグがあります。ここではすべてが明確です。
質問は - どのようにPHPで同じオブジェクトを構築するのですか?私のコードを見てみましょう:
$data = [
"name" => 'value',
];
$packed = msgpack_pack($data);
for($i = 0; $i < strlen($packed); $i++) echo ord($packed[$i]) . ",";
出力は次のとおりです。 "129,164,110,97,109,101,165,118,97,108,117,101" 明らか
[196]、[5] [165]に変更されています。私はPHPコードでは変数の型は文字列であることを理解しましたが、PHPでArrayBuffer(生のバイナリ)データをエミュレートする方法はありますか?
私はPHPパック()を試しましたが、これは役に立ちませんでした。