ホームページ  >  記事  >  バックエンド開発  >  PHP 圧縮関数の実装: gzencode、gzdeflate、gzcompress の違い、gzencodegzdeflate_PHP チュートリアル

PHP 圧縮関数の実装: gzencode、gzdeflate、gzcompress の違い、gzencodegzdeflate_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:59:56789ブラウズ

PHP圧縮関数の実装: gzencode、gzdeflate、gzcompressの違い、gzencodegzdeflate

• gzencodeはデフォルトでZLIB_ENCODING_GZIPエンコーディングを使用し、gzip圧縮形式を使用します。実際にはdefalteアルゴリズムを使用してデータを圧縮し、ファイルヘッダーとadler32を追加します。チェック
•gzdeflate はデフォルトで ZLIB_ENCODING_RAW エンコーディング方式を使用し、deflate データ圧縮アルゴリズムを使用します。実際には、最初に LZ77 で圧縮され、次にハフマンコーディングで圧縮されます
。 •gzcompress; ZLIB_ENCODING_DEFLATE エンコードは、zlib 圧縮形式を使用してデフォルトで使用され、実際には deflate を使用してデータを圧縮し、zlib ヘッダーと CRC チェックを追加します。

これら 3 つの関数の比較は、本質的に 3 つの圧縮方法 (deflate、zlib、gzip) の比較となります。

パフォーマンスの観点から: deflate は gzip や zlib よりも優れています
圧縮後のテキスト ファイルのデフォルトの圧縮率の次元から判断すると、deflate は zlib よりも優れており、gzip よりも優れています

これら 3 つのアルゴリズムのうち、gzip と zlib の作者は、Jean-Loup Gailly と Mark Adler です。

これら 2 つのアルゴリズムは、グラフィック形式の png と同様に、deflate アルゴリズムを使用します。
deflate アルゴリズムは、LZ77 アルゴリズムとハフマン コーディングの両方を使用する可逆データ圧縮アルゴリズムです。
これはもともと Phil Katz によって彼の PKZIP アーカイブ ツールのバージョン 2 用に定義され、その後 RFC 1951 仕様として定義されました。

deflate アルゴリズムの圧縮と解凍の実装プロセスは、圧縮ライブラリ zlib にあります。

PHP の圧縮実装は、deflate、zlib、および gzip 圧縮メソッドを提供する関数ライブラリである zlib に依存しています。
今回使用した上記3つの関数は、パラメータのエンコードを同じ値に変換し、圧縮率を同じ値に設定すれば、最終的には同じ関数が呼び出され、効果やパフォーマンスは同じになります。

PHP の zlib 実装は、拡張機能として ext/zlib ディレクトリに存在します。圧縮機能は deflateInit2() + deflate() + deflateEnd() の 3 つの関数で完了し、解凍機能は inflateInit2() + inflate() + inflateEnd() の 3 つの関数で完了します。圧縮は、入力文字列、圧縮率、結果出力に加えて、最終的に php_zlib_encode 関数を通じて呼び出され、エンコーディングとしてさまざまなエントリ関数呼び出しパラメーターが使用されます。 deflateInit2 の 4 番目のパラメーターはエンコーディングを指定します。

PHP は 3 つの定数を定義します。

コードをコピーします

コードは次のとおりです: #define PHP_ZLIB_ENCODING_RAW -0xf //deflate -15 #define PHP_ZLIB_ENCODING_GZIP 0x1f //gzip 15 + 16 #define PHP_ZLIB_ENCODING_DEFLATE 0x0f // zlib 15



3 つの関数の呼び出しプロセス中に他のアルゴリズムを使用するエンコーディングを直接指定できます:

コードをコピーします

コードは次のとおりです: zlib: ZLIB_ENCODING_DEFLATE gzip: ZLIB_ENCODING_GZIP 収縮: ZLIB_ENCODING_RAW


これら 3 つの関数は、3 つのアルゴリズムの単純な呼び出しメソッドであり、より適切な名前が付けられています。 3 つの関数は同じエンコーディングを指定することで同じ効果を得ることができ、PHP では汎用圧縮関数として zlib_encode 関数も提供しています。

参考:

http://shouce.jb51.net/gzip/rfc-deflate.html http://www.gzip.org/zlib/rfc-deflate.html

興味があるかもしれない記事:

php ZipArchive圧縮関数の詳細な例

http://www.bkjia.com/PHPjc/1096141.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1096141.html技術記事 PHP 圧縮関数の実装: gzencode、gzdeflate、gzcompress の違い gzencodegzdeflate gzencode はデフォルトで ZLIB_ENCODING_GZIP エンコーディングを使用し、実際には... を使用します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。