2013-02-23 203 views
0

我正在开发一个C#团结项目。 我有一些对象,我想保存在PHP服务器上。php要统一如何传递byte []或二进制数据?

所以我首先将它们序列化为json,然后压缩它们并将它们上传到服务器, 将它保存在db上(因为二进制文件,字符串足够好吗?)。

现在我想取回统一的数据。 PHP应该如何返回值?团结应该如何接受它?

我将处理解压缩和反序列化为json。 (使用jsonfx for json和使用c#编写的compress方法) 这部分工作正常。

我只需要能够在每个平台上接收相同的字节[]。

它应该是这个样子

C# - 上传数据(伪C#)//这部分工作得很好

wwwform myform= new wwwform() 
byte[] mybytearr = ... 
wwwform.addbinary ($mybytearr); 
WWW myw= new www (url,myform) 

C# - 获取数据(需要帮助这里)

WWW www = > new www (url,formdata) 
myinput =www.text; 

PHP - 要发送的数据备份的客户端(和需要帮助这里) ...

$myvarbackfromthedb =. 
echo $myoutput 

当$ myoutput是二进制数据或字节[]时,我该怎么做?

感谢您的帮助!

更新:

所以这样做的动机是为了节省字节[]的压缩返回。我结束了,将它移动到base64字符串,然后将其作为字符串传递给PHP,然后作为字符串传递给数据库。

+0

也许可以帮助yoou json_decode()? – Winston 2013-02-23 10:26:39

+0

不行,即时消息确定了json部分,只需要在该消息后单独调用字节[]即可。 – yaron 2013-02-23 10:32:52

+0

你能显示一下你的二进制字符串吗? – Winston 2013-02-23 10:34:49

回答

1

让我们开始与一些二进制数据:

$binary = file_get_contents('/tmp/foo'); 

或许出于测试目的:

$binary = join(array_map('chr', range(0, 127))); 

两者都是一些任意的二进制字符串。您可以输出他们有效的JSON字符串使用:

echo json_encode(array('foo' => $binary)); 

这会给你这样的事情:

{"foo":"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-.\/:;<=>[email protected][\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"} 

这是二进制数据的有效JSON表示。任何人谁是解码数据将返回二进制值。您可能要多一点,虽然有效编码它,例如使用Base64编码:

echo json_encode(array('foo' => base64_encode($binary))); 

这会给你:

{"foo":"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8="} 

现在接收器只是必须再次进行解码。在PHP中看起来像这样:

$data = json_decode($json, true); 
$data['foo'] = base64_decode($data['foo']); 
+0

谢谢我会检查它,可能需要一段时间。为了确保你建议将binari数据“包装”为json,然后返回到c#客户端,请更正? – yaron 2013-02-23 12:33:45

+0

你究竟做得如何取决于你。您可以将二进制数据*作为JSON *响应的一部分发送,或者您可以直接以二进制形式发送数据,而无需包含额外的数据,您可以使用多部分HTTP响应......有很多方法可以实现,这取决于什么对你的情况最好,什么是最容易消费的客户。我所展示的是如何将它作为JSON发送,这是一种简单的方法。 – deceze 2013-02-23 12:46:25

+0

reciver将如何收回$ data ['foo']? PHP的回声$数据,和C#把它作为文本,并从那里开始? – yaron 2013-02-23 15:04:52