--
zlib 不是 zip,zlib 的不是 GZIP 編碼檔案沒有現成的工具可以處理,至少 Hoyo 沒找到可用的
幾乎所有主流程式語言都支援 Zlib 甚至是內建支援
--
PHP
Zlib 有三種編碼方式
- 資料流 : ZLIB_ENCODING_RAW
- DEFLATE : ZLIB_ENCODING_DEFLATE
- GZIP : ZLIB_ENCODING_GZIP
如果使用 ZLIB_ENCODING_GZIP 並且儲存成檔案,就可以用一般的壓縮/解壓縮程式開啟
PHP 環境:
資料處理
壓縮需要指定編碼
ZLIB_ENCODING_DEFLATE 編碼
1 2 3 4 |
$str = 'hello world'; $enc = zlib_encode($str, ZLIB_ENCODING_DEFLATE); echo bin2hex($enc); // 789ccb48cdc9c95728cf2fca4901001a0b045d |
ZLIB_ENCODING_GZIP
1 2 3 4 |
$str = 'hello world'; $enc = zlib_encode($str, ZLIB_ENCODING_GZIP); echo bin2hex($enc); // 1f8b0800000000000003cb48cdc9c95728cf2fca49010085114a0d0b000000 |
ZLIB_ENCODING_GZIP 明顯長了一些,因為有包含檔案壓縮格式,也就是將 $enc 存成檔案是可以使用壓縮軟體開啟
檔案處理
1 2 3 |
$str = 'hello world'; $enc = zlib_encode($str, ZLIB_ENCODING_GZIP); file_put_contents('/tmp/hello.txt.gz', $enc); |
這個檔案是可以開啟的
如果使用 DEFLATE 或 RAW 就無法直接使用壓縮軟體開啟,當然如果要當成一種祕密的傳輸方式也可以這樣使用
解壓縮
1 2 3 |
$f = file_get_contents(__DIR__.'/1234_delphi.doc'); $z = zlib_decode($f); file_put_contents('/tmp/r1234_delphi.doc', $z); |
--
Python
版本:Python 3.6
資料壓縮成檔案
1 2 3 4 5 6 7 8 9 |
import zlib my_data = b'Welcome to JavaTpoint' compressed_data = zlib.compress(my_data, 2) f = open('outfile.txt', 'wb') f.write(compressed_data) f.close() |
檔案壓縮
1 2 3 4 5 6 7 8 9 10 11 |
import zlib file1 = open('s1234.doc', 'rb') my_data = file1.read() file1.close() compressed_data = zlib.compress(my_data) f = open('1234_python.doc', 'wb') f.write(compressed_data) f.close() |
--
相容性
將 Pyton 剛剛壓縮的檔案拿給 PHP 也是可以正常解開
1 2 3 |
$f = file_get_contents(__DIR__.'/1234_python.doc'); $z = zlib_decode($f); file_put_contents('/tmp/r1234_python.doc', $z); |
--
Delphi
研究這個其實一開始就是為了 Delphi 壓縮的檔案,可是研究後才發現根本就解不開 Delphi 壓的 zlib 檔案,過了快 2 個月在看了二進制資料後發現
Delphi 壓縮
Python 壓縮
Delphi 好像就是一開始多了 00 96 00 00 00 00 00 00 這 8 個 byte,刪除之後就可以正常和其他程式相容
--
612 total views, 2 views today