我刚看到你的问题,很好奇。所以我做了我自己的测试用例。我将所有与 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 解压缩它。它失败了,你得到了同样的错误。我进一步调查并发现了以下方法:
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=22967 似乎 gzuncompress 无法解压缩 GZIP 数据,其标题将生成为 GZIPOutputStream。如 Bugtracker 条目中所述,尝试裁剪标题。