ホームページ  >  記事  >  バックエンド開発  >  PHP圧縮機能実装:gzencode、gzdeflate、gzcompressの比較

PHP圧縮機能実装:gzencode、gzdeflate、gzcompressの比較

高洛峰
高洛峰オリジナル
2016-10-17 10:55:171252ブラウズ

gzencode はデフォルトで ZLIB_ENCODING_GZIP エンコーディングを使用し、gzip 圧縮形式を使用します。実際には、defalte アルゴリズムを使用してデータを圧縮し、ファイルヘッダーと adler32 検証を追加します。

gzdeflate はデフォルトで ZLIB_ENCODING_RAW エンコーディングを使用し、deflate データ圧縮アルゴリズムを使用します。実際には LZ77 圧縮が使用され、次にハフマン コーディングを使用して

gzcompress が使用されます。デフォルトのエンコーディングは ZLIB_ENCODING_DEFLATE であり、実際には deflate がデータの圧縮に使用され、次に zlib ヘッダーと CRC が使用されます。チェックが追加されました

これら3つの機能の比較本質 上記は、deflate、zlib、gzipの3つの圧縮方法の比較です。

パフォーマンスの観点から: 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_DEFLATE 0x0f // zlib 15

Three 関数の呼び出し処理中、他のアルゴリズムを使用するエンコーディングを直接指定できます:

zlib : ZLIB_ENCODING_DEFLATE gzip: ZLIB_ENCODING_GZIPdeflate: ZLIB_ENCODING_RAW

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。