Ben PHP çalıştıran bir Windows web sunucusu C + + ile yazılmış bir uygulama çalıştıran bir arka uç Linux sunucu ile çok yavaş bir bağlantı üzerinden iletişim bir proje üzerinde çalışıyorum. Iki makine arasındaki bağlantı çok yavaş olduğu için, ben aralarındaki trafik hareketli sıkıştırmak istiyorum.
Ben, bir dize sıkıştırmak, bir dosyaya kaydetmek dosyasını okuyun ve zlib kullanarak C + + dize sıkıştırmasını ve aynı şekilde PHP nerede ele verdik. Ben bir dilde bir dize sıkıştırmak ve (gerçek dünyada neler olacak gibi) diğer sıkıştırın çalışırsanız Ancak, ben sıkıştırılmış veriler bozuk olduğunu yakınmalar hatalar alıyorum. Ben de aynı dize Zlib her dil farklı bir sıkıştırma algoritması kullanarak inanmak için bana yol PHP, daha farklı bir dosyaya C + + sonuçlarında sıkıştırılmış olduğunu fark ettik.
Ben her iki tarafta varsayılan ayarları kullanıyorum. C + + I sıkıştırma ve açma yapmak için kullanıyorum
compress((Bytef*)compressed, (uLongf*)&compressedLength, (Bytef*)uncompressed, (uLong)uncomressedLength);
uncompress((Bytef*)uncompressed, (uLongf*)&uncomressedLength, (Bytef*)compressed, (uLong)compressedLength);
PHP kodu ise
$compressed = gzcompress($uncompressed);
$uncompressed = gzuncompress($compressed);
Neden bu farklı sıkıştırılmış dizeleri neden vardır? Ne dekompresyon ile sorunlara neden oluyor bu? Ben bu işe almak için yapıyor olmalıdır? Ayrıca, ben Zlib kararlı değilim. Bunu yapmak için daha iyi bir yolu varsa Zlib benim ilk araştırma ortaya ne, ama, ben bütün kulaklar değilim.
Edit: Aslında, biraz daha fazla test yaptıktan sonra, bu C + + evrensel değil benim ilk test case ile çalışan, ancak anlaşılmaktadır. Ben girdi "hellohellohello" ile denedim, ve dekompresyon üzerinde, bir Z_DATA_ERROR rapor ve sadece "merhaba" için sıkıştırılmış. Bunu ben PHP, C + +, sıkıştırılmış dizeleri açıldıktan mutsuz neden açıklayabilir C + + tarafında yanlış bir şey, yapıyorum demek.
Edit 2: Ben zpipe.c örnek program denedim ve doğru PHP ile sıkıştırılmış dizeleri genişletir ve PHP sıkıştırmasını olabilir sıkıştırılmış dizeleri üretir. Açıkçası, sorun (lar) benim C + + kod var. Sıkıştıran benim kullanımı yanlıştır, ya da ben okuma ve yanlış dosyayı yazıyorum ya. Kompres veya sıkıştırmasını programları ne zpipe ile doğru iletişim.
Update: ben şimdi PHP kullanarak bir dize sıkıştırmak ve PHP veya C + + ile ya okumak nerede kazanılmış ettik ve C + + ile bir dize sıkıştırmak ve C + + ile okuyabilirsiniz, ancak okuma girişimi PHP Uyarı PHP sonuçlar: gzuncompress (): veri hatası. Ne senaryolar çalışmıyor / çalışan bu birleşimine neden olacağı farklı olabilir?