Java PHP ile Decompressing ile sıkıştırılması

3 Cevap java

Ben bir servlet bir PHP komut dosyası sıkıştırılmış veri sağlayan bir durum var. Ben Java tarafında hiçbir sorun üzerindeki verileri sıkıştırmak, ancak PHP sıkıştırmasını mümkün görünüyor.

Here is the relevent code snippets Java Side:

  OutputStream o=response.getOutputStream();

GZIPOutputStream gz=new GZIPOutputStream(o);
gz.write(GridCoder.encode(rs,id, perPage, page).getBytes());
gz.close();
o.close();

PHP Side:

$xml= gzuncompress($xml);

Birisi bana doğru yönde işaret edebilir.

3 Cevap

Ben sadece soru gördüm ve merak oldu. Yani ben kendi test çantayı yaptı. Ben sorunu ve bu gibi kodlanmış bir şey dışında tüm Servlet ilgili şeyler yaptı:

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 veri sıkıştırmasını başardı. Sonra ben PHP ile sıkıştırmasını çalışır. Bu var aynı hata ile başarısız oldu. Ben daha fazla araştırılması ve aşağıdaki yöntemleri bulundu:

  • gzdecode ()
  • gzinflate ()

gzinflate da işe yaramazsa, gzdecode sadece ben yüklü havn't PHP6 wich ile sevk edilir. Belki bu deneyebilirsiniz. Göre (http://bugs.php.net/bug.php?id=22123 bu işe yarayacak)

I doğru olmalıdır kadar GNU gunzip verilerini söndürün çünkü sorun Java tarafında olduğundan şüpheliyim Im. Sen PHP tarafında daha araştırmak isteyebilirsiniz.

. Orijinal poster gibi aynı sorun var NET ve PHP için bir realted soru var: http://stackoverflow.com/questions/905328/can-php-decompress-a-file-compressed-with-the-net-gzipstream-class. PHP ya GZIPOutputStream ait. NET eşdeğer veri sıkıştırmasını mümkün görünmüyor.

I bir "çözüm" yok ama ben zaten doğru yönde işaret olabileceğini üzgünüm.

EDIT: I found an entry in the PHP Bugtracker which explains the problem: http://bugs.php.net/bug.php?id=22967 It seems that gzuncompress cannot uncompress GZIP data with headers which will be produced be the GZIPOutputStream. As stated in the Bugtracker Entry, try to crop the header.

DeflaterOutputStream yerine GZIPOutputStream kullanmayı deneyin

PHP fonksiyonları DEFLATE uygulayan libzlib içine diyoruz. Gzip tamamen farklı bir canavar.

PHP fonksiyonları gz adlandırma * XXX * Sadece karışıklığa ekler.

Ben bir rehber olarak Devon_C_Miller ve Malax tarafından yazılan kullanarak, bunu düzeltmek için bir yol buldu.

Java için kod:

   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 tarafı:

   $content = http_get_request_body();

   $uncontent = gzuncompress($content);