为什么在我的 PHP 演示中无法通过 Go 解压 gzip 数据,但是 PHP gzip data to Go 却成功了?我需要从 Go to PHP API 服务发布 gzip JSON 数据。测试结果 -> | php | go ---------------------php | ok | okgo | fail | okPHP代码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 mainimport ( "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 去就好了。
1 回答
- 1 回答
- 0 关注
- 234 浏览
添加回答
举报
0/150
提交
取消