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)
有人可以指出我正确的方向.
我刚看到你的问题并对此感到好奇.所以我做了自己的测试用例.我把所有与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解压缩它.它失败了你得到的同样的错误.我进一步调查,发现了以下方法:
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中所述,尝试裁剪标题.
尝试使用DeflaterOutputStream而不是GZIPOutputStream
PHP函数调用libzlib实现DEFLATE.Gzip完全是一个不同的野兽.
命名PHP函数gz XXX只会增加混乱.