使用PHP解压缩Java

10 php java gzip gzipoutputstream

我有一种情况,servlet正在向PHP脚本提供压缩数据.我压缩Java端的数据没问题,但PHP似乎无法解压缩.

以下是Java Side的相关代码片段:

  OutputStream o=response.getOutputStream();

GZIPOutputStream gz=new GZIPOutputStream(o);
gz.write(GridCoder.encode(rs,id, perPage, page).getBytes());
gz.close();
o.close();
Run Code Online (Sandbox Code Playgroud)

PHP方面:

$xml= gzuncompress($xml);
Run Code Online (Sandbox Code Playgroud)

有人可以指出我正确的方向.

Mal*_*lax 9

我刚看到你的问题并对此感到好奇.所以我做了自己的测试用例.我把所有与Servlet相关的东西都留下了问题,编码如下:

import java.io.*;
import java.util.zip.GZIPOutputStream;

public class GZIPTestcase {

    public static void main(String[] args) throws Throwable {
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(new FileOutputStream(new File("/Users/malax/foo2.gz")));
        PrintWriter pw = new PrintWriter(gzipOutputStream);

        pw.println("All your base are belong to us!");
        pw.flush();
        pw.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

GNU gunzip能够解压缩数据.然后我尝试用PHP解压缩它.它失败了你得到的同样的错误.我进一步调查,发现了以下方法:

  • gzdecode()
  • gzinflate()

gzinflate也不起作用,gzdecode只附带PHP6,我没有安装.也许你可以试试这个.(根据http://bugs.php.net/bug.php?id=22123这将有效)

我怀疑问题是在Java方面,因为GNU的gunzip可以缩小数据,因此它必须是正确的.您可能希望在PHP方面进一步调查.

对于.NET和PHP存在一个问题,原始海报遇到了与您相同的问题:PHP可以解压缩使用.NET GZipStream类压缩的文件吗?.PHP似乎无法从GZIPOutputStream的.NET等效解压缩数据.

对不起,我没有"解决方案",但无论如何我可能已经指出了正确的方向.

编辑:我在PHP Bugtracker中找到了一个解释问题的条目: http://bugs.php.net/bug.php?id = 226967 gzuncompress似乎无法使用将生成GZIPOutputStream的标头解压缩GZIP数据.如Bugtracker Entry中所述,尝试裁剪标题.


Dev*_*ler 6

尝试使用DeflaterOutputStream而不是GZIPOutputStream

PHP函数调用libzlib实现DEFLATE.Gzip完全是一个不同的野兽.

命名PHP函数gz XXX只会增加混乱.