簡體   English   中英

與VB.NET類似的PHP GZIP壓縮

[英]Equivalent PHP GZIP Compression like in VB.NET

我正在將用VB.NET開發的Web服務遷移到PHP

我解釋:

在VB中。 NET我有一個用GZIP 壓縮單個字符串的方法。 (“ Hello world! ”)

Web服務中的方法返回一個字節數組

然后在具有android的設備上接收字節數組,解壓縮並轉換為字符串,此過程完美無缺。

VB.NET中的方法是這樣的:

<WebMethod(Description:="GZIP Test")> _
Public Function GZIP() As Byte()
    Dim vTest As String = "Hello world!"

    Dim vBuffer1() As Byte = StrToByteArray(vTest)
    Dim vBuffer2() As Byte = Compress(vBuffer1)

    Return vBuffer2
End Function

Private Function StrToByteArray(ByVal str As String) As Byte()
    Dim encoding As New System.Text.UTF8Encoding()
    Return encoding.GetBytes(str)
End Function

Private Function Compress(ByVal Bits() As Byte) As Byte()
    On Error Resume Next
    Using ms As New MemoryStream(), zipMem As New GZipStream(ms, CompressionMode.Compress, True)
        zipMem.Write(Bits, 0, Bits.Length)
        zipMem.Close()

        Return ms.ToArray
    End Using
End Function

此方法返回以下值:

<base64Binary>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ir6dl2WVXlV1Oftd/x+VGYUbDAAAAA==</base64Binary>

我希望PHP返回給我相同的價值。

我在PHP中完成的測試返回以下內容。

function GZIP() {
      ob_start ( 'ob_gzhandler' );
      return base64_encode(gzdeflate('Hello world!', 9));
}

PHP中返回的值是:

80jNyclXKM8vyklRBAA=

為什么? 有一個例子返回相同的?

提前感謝所有人。

您正在使用錯誤的解壓縮算法。 請改用phps gzcompress ()和gzuncompress ()。

首先,您不能要求完全相同的結果。 所有你需要的無損壓縮器都是它在解壓縮時重現完全相同的輸入。

其次,你想使用gzencode生成gzip流。 gzdeflategzcompress都不gzdeflate 前者產生原始的deflate流,第二個zlib流。 (不要讓我開始講述誤導性的名稱以及關於它們的混亂的PHP文檔 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM