我工作的一个项目,其中运行PHP在Windows Web服务器进行通信与运行用C++编写的应用程序后端Linux服务器的连接速度极慢。由于两台机器之间的连接速度很慢,我想压缩它们之间的流量。移动压缩C++和PHP字符串与zlib的
我已经得到了我在哪里可以压缩一个字符串,将其保存到一个文件,读取文件,并解压缩在C++中使用zlib的字符串,同样在PHP。但是,如果我试图压缩一种语言的字符串并在另一种语言中解压缩(就像在现实世界中发生的那样),我会遇到错误,认为压缩数据已损坏。我还注意到,用C++压缩的相同字符串导致与PHP不同的文件,这导致我相信Zlib对每种语言都使用不同的压缩算法。
我两边使用默认设置。 C++的我用做压缩和解压是
compress((Bytef*)compressed, (uLongf*)&compressedLength, (Bytef*)uncompressed, (uLong)uncomressedLength);
uncompress((Bytef*)uncompressed, (uLongf*)&uncomressedLength, (Bytef*)compressed, (uLong)compressedLength);
而PHP代码
$compressed = gzcompress($uncompressed);
$uncompressed = gzuncompress($compressed);
为什么这些导致不同的压缩字符串?这是什么导致解压缩问题?我该怎么做才能使这个工作?另外,我没有致力于Zlib。 Zlib是我最初研究发现的,但如果有更好的方法可以做到这一点,我就会全神贯注。
编辑:实际上,在做了一些更多的测试之后,似乎C++正在使用我的初始测试用例,但并不普遍。我用输入“hellohellohello”尝试了它,在解压缩时,它报告了一个Z_DATA_ERROR并将其解压缩为“hello”。我想这意味着我在C++端做了错误的事情,这可能解释了为什么PHP对C++压缩字符串进行解压缩时感到不满。
编辑2:我尝试了zpipe.c示例程序,它正确地解压缩由PHP压缩的字符串并生成压缩字符串PHP可以解压缩。显然,这个问题存在于我的C++代码中。我的压缩和解压缩使用不正确,或者我正在读写文件不正确。压缩或解压缩程序都不能与zpipe正确交互。
更新:现在我已经得到的地方,我可以用PHP压缩字符串,并用PHP或C++读它,我可以用C++与C++压缩字符串,并读出来,但是试图读取它与PHP结果在PHP警告:gzuncompress():数据错误。有什么可能会导致这种工作/不工作场景的组合?
这不是你正在使用的(DE)压缩++的C,这仅仅是个函数声明。 – 2010-10-28 18:57:42
他们是图书馆电话。压缩的,compressedLength等是我正在使用的变量的实际名称,并且由于Zlib使用它自己的类型而不是标准类型,所以当我进行调用时,我正在投射它们。 – 2010-10-28 19:00:08
请问您可以发布完全更新的代码吗?谢谢。 – cedivad 2011-12-26 21:48:40