【问题标题】:Decompress SharpZipLib string in php or JS?在 php 或 JS 中解压缩 SharpZipLib 字符串?
【发布时间】:2010-10-28 22:18:26
【问题描述】:

我在通过 PHP/Soap 连接到 Web 服务的 linux 服务器上。

问题是一个方法正在通过 SharpZipLib 压缩响应。所以我得到的只是一个乱码。

有谁知道用 PHP 或 JS 解压的方法吗?

谢谢!

更新:

这是返回的压缩测试数据:

UEsDBC0AAAAIAI5TWz3XB / ZI ////////// 8EABQAZGF0YQEAEADWAgAAAAAAABYBAAAAAAAAfZLvToNAEMTnUXyDatXEDxcS / 3zxizH6BBVESaESKFHf3t + cOWgtNhcuYXd2Zndug570qjdV6rVVpxV3pQ9tlCnohv + ab6Mc1J0G7kynZBb / 5IKeYTDLAGOm28hVwtmpobqItfuYACpp1Ki42jobOGqO1eYRIXI2egHfofeOTqt7OE6o8QQdmbnpjMm01JXOdcG5ZKplVDpeEeBr6LCir2umKaJCj3ZSbGPEE3 + NSD / 57fADtfYhoRtwZqmJ / C3Z + bmaHl9Kzq6CX20bWRJzjvMNbtjZ71Fvtdfz2RjPY / 2ESy54ExJjC6P78U74XYudOaw2gPUOTSyfRDut9cjLmGma2 // 24TBTwj85573zDhziFkc29wdQSwECLQAtAAAACACOU1s91wf84v ////////// BAAUAAAAAAAAAAAAAAAAAAAAZGF0YQEAEADWAgAAAAAAABYBAAAAAAAAUEsFBgAAAAABAAEARgAAAEwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA =

【问题讨论】:

标签: c# php javascript .net sharpziplib


【解决方案1】:

很有可能,它使用的是 gzip。您应该查看PHP Zlibgzdecodegzdeflate 方法。您可能需要查看内容类型标头或其他响应标头。

您还可以尝试在 Web 服务请求中设置 Accept 标头,告诉服务您不知道如何处理压缩。如果它是一项适当的服务,它将尊重请求。

编辑查看 .pdf,他们将数据作为 zip 存档发送 - 因此您需要找到一个处理内存 zip 存档的 PHP 库。他们用来解码的 C# 代码非常简单——他们只是读取存档中的所有条目并展开它们。您可以尝试使用PHP wrapperPHP Zip 将其存储为内存缓冲区。

您是否尝试设置要求不压缩的 Accept Header?

【讨论】:

  • 虽然我希望客户端足够聪明,可以自动处理 HTTP 压缩。猜猜不是......或者它是流中的一个拉链。
  • 谢谢!我试过 gzdeflate 和 gzuncompress 但似乎都返回数据错误或乱码文本。这可能与压缩级别有关吗?警告:gzuncompress() [function.gzuncompress]:第 6 行 /home/npculti/public_html/unzip/unzip.php 中的数据错误
  • 我还得到了一个在 gzdecode 上找不到的功能,所以如果是这样的话,我只需要安装它并尝试一下。我也附上了我遇到的问题的压缩字符串。感谢您的帮助!
  • 我刚刚尝试了一个我发现的 gzdecode 函数,它返回相同的压缩字符串。函数 gzdecode($data){ $g=tempnam('/tmp','ff'); @file_put_contents($g,$data); ob_start();读取gzfile($g); $d=ob_get_clean();返回$d; }
  • 嘿 SB,感谢您的 cmets 我仍在努力在我正在测试的服务器上设置 ZipArchive。我会回来报告的。
【解决方案2】:

你可以使用这样的函数解压你的字符串:

function decode($data)
{
    $filename = tempnam('/tmp', 'tempfile');
    file_put_contents($filename, base64_decode($data));

    $zip = zip_open($filename);
    $entry = zip_read($zip);

    $decoded = zip_entry_read($entry);

    zip_entry_close($entry);
    zip_close($zip);

    return $decoded;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多