ホームページ  >  記事  >  バックエンド開発  >  PHP圧縮関数gzencode、gzdeflate、gzcompressの違いを詳しく解説

PHP圧縮関数gzencode、gzdeflate、gzcompressの違いを詳しく解説

*文
*文オリジナル
2017-12-28 15:26:381778ブラウズ

この記事では主に PHP の圧縮関数の実装、つまり gzencode、gzdeflate、gzcompress の違いについて紹介します。必要な方は参考にしてください。お役に立てれば幸いです。

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

が追加されました。この比較は、基本的に 3 つの圧縮方法 (deflate、zlib、gzip) の比較になります。
パフォーマンスの観点から: deflate は gzip よりも優れており、zlib よりも優れています
圧縮後のテキスト ファイルのデフォルトの圧縮率の観点から: deflate は zlib よりも優れており、gzip よりも優れています

この中の gzip と zlib の作者3 つのアルゴリズムは 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
deflate: ZLIB_ENCODING_RAW

これら 3 つの関数は単純です。 3 つのアルゴリズムの呼び出しメソッドが、より適切な名前で示されています。 3 つの関数は同じエンコーディングを指定することで同じ効果を得ることができ、PHP では汎用圧縮関数として zlib_encode 関数も提供しています。 H 関連する推奨事項: pPhp 圧縮文字列のいくつかの方法


Php 圧縮画像の方法

Php は複数の CSS ファイルの実装コードを圧縮します

以上がPHP圧縮関数gzencode、gzdeflate、gzcompressの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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