Я только что увидел ваш вопрос и мне было любопытно. Итак, я сделал свой собственный тест-кейс. Я оставил все проблемы, связанные с сервлетом, вне проблемы и закодировал что-то вроде этого:
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, потому что GNZ gunzip может выкачать данные, поэтому они должны быть правильными. Возможно, вы захотите продолжить исследование на стороне PHP.
Существует реальный вопрос для .NET и PHP, где у оригинального плаката та же проблема, что и у вас: Может ли PHP распаковать файл, сжатый с помощью класса .NET GZipStream? . Похоже, что PHP не может распаковать данные из .NET-эквивалента GZIPOutputStream.
Извините, что у меня нет "решения", но я все равно мог бы указать вам правильное направление.
РЕДАКТИРОВАТЬ: Я нашел запись в PHP Bugtracker, которая объясняет проблему:
http://bugs.php.net/bug.php?id=22967 Похоже, что gzuncompress не может распаковать данные GZIP с заголовками, которые будут созданы GZIPOutputStream. Как указано в записи Bugtracker, попробуйте обрезать заголовок.