我这里有一个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来解压。 它失败,你得到了同样的错误。 我进一步调查,发现了以下方法:
gzinflate也不管用,gzdecode仅随PHP6至极我没有带安装。 也许你可以试试这个。 (据http://bugs.php.net/bug.php?id=22123这将工作)
林我怀疑,问题是在Java端,因为GNU的gunzip解可以缩小数据,因此它必须是正确的。 你可能想在PHP端进一步调查。
没有为.NET和PHP一个realted问题在那里,你有原来的海报有同样的问题: 可以在PHP解压与.NET GZipStream类的压缩文件? 。 PHP似乎并不能够无论是从GZIPOutputStream的.NET相当于解压缩数据。
抱歉,我没有一个“解决方案”,但我可能会指出你在正确的方向反正。
编辑:我发现在PHP错误追踪这也解释了问题的条目: http://bugs.php.net/bug.php?id=22967似乎gzuncompress不能与解压缩,这将是GZIPOutputStream产生头GZIP数据。 正如错误追踪该项记录中,尝试裁剪头。
尝试使用DeflaterOutputStream代替GZIPOutputStream
PHP函数调用到libzlib它实现缩小。 Gzip已完全不同的野兽。
命名的PHP函数GZ XXX只会增加混乱。
我找到了一种方法来解决它,使用后由Devon_C_Miller和马拉克斯作为准则。
代码的Java:
String body = "Lorem ipsum shizzle ma nizle";
URL url = new URL("http://some.url/file.php?id=" + uid);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-encoding", "deflate");
conn.setRequestProperty("Content-type", "application/octet-stream");
DeflaterOutputStream dos = new DeflaterOutputStream(conn.getOutputStream());
dos.write(body.getBytes());
dos.flush();
dos.close();
PHP方面:
$content = http_get_request_body();
$uncontent = gzuncompress($content);
“Java的Deflater +的结合PHP gzuncompress ”为我工作。 客户:安卓4.1.1,服务器站点:PHP 5.3
对他们来说是寻找用于压缩请求体只有部分在某些情况下,例如,作为箱,使用HTTP表来发表的一些参数和一个文件的溶液,以下是我在Android的侧使用的代码段:
public static byte[] compressString(String data) throws IOException {
byte[] compressed = null;
byte[] byteData = data.getBytes();
ByteArrayOutputStream bos = new ByteArrayOutputStream(byteData.length);
Deflater compressor = new Deflater();
compressor.setLevel(Deflater.BEST_COMPRESSION);
compressor.setInput(byteData, 0, byteData.length);
compressor.finish();
// Compress the data
final byte[] buf = new byte[1024];
while (!compressor.finished()) {
int count = compressor.deflate(buf);
bos.write(buf, 0, count);
}
compressor.end();
compressed = bos.toByteArray();
bos.close();
return compressed;
}