我有一个 servlet 正在向 PHP 脚本提供压缩数据的情况。我在Java端压缩数据没有问题,但是PHP好像无法解压。
这是相关的代码片段 Java 端:
OutputStream o=response.getOutputStream();
GZIPOutputStream gz=new GZIPOutputStream(o);
gz.write(GridCoder.encode(rs,id, perPage, page).getBytes());
gz.close();
o.close();
PHP 端:
$xml= gzuncompress($xml);
谁能给我指出正确的方向。
最佳答案
刚看到你的问题,很好奇。所以我做了自己的测试用例。我把所有与 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();
}
}
GNU gunzip 能够解压缩数据。然后我尝试用 PHP 解压缩它。它失败了,你得到了同样的错误。我进一步调查,发现了以下方法:
- gz解码()
- gzinflate()
gzinflate 也不起作用,gzdecode 仅随 PHP6 一起提供,我还没有安装。也许你可以试试这个。 (根据 http://bugs.php.net/bug.php?id=22123 这会起作用)
我怀疑问题出在 Java 方面,因为 GNU 的 gunzip 可以压缩数据,所以它一定是正确的。您可能想进一步调查 PHP 方面。
有一个关于 .NET 和 PHP 的真实问题,原始发帖人与您有同样的问题:Can PHP decompress a file compressed with the .NET GZipStream class? . PHP 似乎也无法从 GZIPOutputStream 的 .NET 等价物中解压缩数据。
抱歉,我没有“解决方案”,但无论如何我可能已经为您指明了正确的方向。
编辑:我在 PHP Bugtracker 中找到了一个解释问题的条目: http://bugs.php.net/bug.php?id=22967似乎 gzuncompress 无法解压缩带有将由 GZIPOutputStream 生成的 header 的 GZIP 数据。如 Bugtracker 条目中所述,尝试裁剪标题。
关于java - 用 Java 压缩 用 PHP 解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406917/