PHP 无法通过 Golang 解压缩 gzip 数据

为什么在我的 PHP 演示中无法通过 Go 解压 gzip 数据,但是 PHP gzip data to Go 却成功了?我需要从 Go to PHP API 服务发布 gzip JSON 数据。


测试结果


 -> |  php   |  go 

---------------------

php |  ok    |  ok

go  |  fail  |  ok

PHP代码


class GzipDemo

{

    public function gzen($data, $file){

       $json_data = json_encode($data);

       $gz_data = gzencode($json_data,9);

       file_put_contents($file,$gz_data);

    }


    public function gzdn($file){

       $data = file_get_contents($file);

        $unpacked = gzdecode($data);

        if ($unpacked === FALSE)

        {

            print("failed:".$file."\n");

        }else{

             print($file. " result Data :".$unpacked ."\n");

        }

    }

}


$demo = new GzipDemo();

$file="phpgzip.txt";

$demo->gzen("data",$file);

$demo->gzdn($file);

$demo->gzdn("gogzip.txt");

这样的结果:PHP 到 PHP 还行。转到 PHP 失败。


去代码


package main


import (

    "bytes"

    "compress/gzip"

    "encoding/json"

    "fmt"

    "io/ioutil"

    "os"

)


func main() {

    gzen("data", "gogzip.txt")

    gden("gogzip.txt")

    gden("phpgzip.txt")

}

func gzen(data string, file string) {

    b, _ := json.Marshal(data)

    buffer := new(bytes.Buffer)

    w, _ := gzip.NewWriterLevel(buffer, gzip.BestCompression)

    defer w.Close()

    w.Write(b)

    w.Flush()

    ioutil.WriteFile(file, buffer.Bytes(), os.ModePerm)

}

func gden(file string) {

    b, _ := ioutil.ReadFile(file)

    buffer := new(bytes.Buffer)

    buffer.Write(b)

    r, _ := gzip.NewReader(buffer)

    defer r.close()

    data, _ := ioutil.ReadAll(r)

    fmt.Println(file, " result Data:", string(data))

}

这个结果:Go to Go就可以了。PHP 去就好了。


红颜莎娜
浏览 235回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go