【问题标题】:Can PHP decompress a file compressed with the .NET GZipStream class?PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?
【发布时间】:2009-05-25 04:36:22
【问题描述】:

我有一个 C# 应用程序,它与基于 PHP 的 SOAP Web 服务进行通信以获取更新和许可。

我现在正在开发一个反馈系统,供用户通过软件自动提交错误和跟踪日志。根据我之前发布的一个问题,我认为 Web 服务是最好的方法(最有可能以最少的配置正常工作)。

我目前的想法是使用 .NET 内置的 gzip 压缩来压缩文本文件,转换为 base64,发送到 Web 服务,然后将 PHP 脚本转换为二进制并解压缩数据。

PHP能否解压用GZipStream压缩的数据,如果可以,如何解压?

【问题讨论】:

    标签: c# php web-services compression gzip


    【解决方案1】:

    我真的试过这个。 GZipStream 不起作用。另一方面,在 .NET 端使用 DeflateStream 进行压缩并在 PHP 端使用 gzinflate 进行解压缩确实有效。您的里程可能会有所不同...

    【讨论】:

    • 我刚刚制作了这个解决方案的原型,它可以工作。现在我只需要处理解压缩和转义大文件导致的 PHP 内存分配错误。
    【解决方案2】:

    如果 http 级库实现了它(客户端和服务器),http has support for gzip-compression,在这种情况下,没有理由手动压缩任何东西。在您进一步冒险之前,您应该检查这是否已经发生。

    【讨论】:

    • 这对客户端发送数据有用吗?我已经完成了从服务器到客户端的gzip编码,但没有从客户端到服务器。
    • 我很确定它根据 HTTP 是有效的。但是,实现是否支持它是另一回事。仍然 - 我认为值得调查。
    【解决方案3】:

    由于服务器正在接受 Web 请求,您确实应该检查 HTTP 标头以确定是否有任何客户端接受 GZIP 编码,而不是每次都猜测和 gzip。

    如果 PHP 客户端可以执行 gzip,它将设置标头,然后您的代码将做出相应的反应并做正确的事情。当为您的代码提供工具来学习客户端的功能时,假设或猜测是一个糟糕的选择。

    【讨论】:

    • 我认为这不适用。客户端是 C# 应用程序,服务器是基于 PHP 的。客户端正在启动与服务器的连接,因此标头将由客户端 (C#) 应用程序生成,而不是服务器。
    • @Chris 你错过了重点,客户端需要告诉服务器它想要什么以及它想要什么。就像它使用 URL 来标识资源一样,标头的原因是包含各种元数据,包括客户端希望接收的编码格式。您误解了标头背后的全部原因,它们允许客户端发送额外的信息,服务器可以在其中定制响应。
    • 例如,有一个标题可以检查以查询用户首选语言的权重,告诉您他们想要什么语言。您的服务器内容应该自然地检查这一点,并且可以定制您的响应。如果您正在编写一个国际应用程序,那么检查并满足这一点是有意义的......不是每个人都会说英语并且当服务员可能想要西班牙语或德语时发送英语会很愚蠢。
    【解决方案4】:

    我写了一篇我最近发布的文章,展示了如何在 C# 中压缩/解压缩。我将它用于几乎相同的场景。我想将日志文件从客户端传输到服务器,它们通常很大。但是在我的情况下,我的 web 服务在 .NET 中运行,所以我可以使用解压缩方法。但看起来 PHP 确实支持一种名为 gzdecode 的方法。

    http://coding.infoconex.com/post/2009/05/Compress-and-Decompress-using-net-framework-and-built-in-GZipStream.aspx

    【讨论】:

      【解决方案5】:

      是的,PHP 可以解压缩 GZIP 压缩字符串,带或不带标头。

      • gzdecode 用于 GZIP 文件格式(即与 gzip 兼容)
      • gzinflate 用于“原始”DEFLATE 格式
      • gzuncompress 用于 ZLIB 格式(GZIP 格式没有一些标头信息)

      我不确定您想要哪一个,因为我不熟悉 .NET GZipStream。这听起来有点像 gzuncompress,因为 ZLIB 格式是一种“流式”格式,但请尝试所有三种格式。

      【讨论】:

      • 供以后参考:gzinflate 是解压 GZipStream 压缩数据的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多