2009-03-07 5 views
51

私は、コマンドラインのPHPスクリプトを使用するクライアント側とApacheの背後にある他の2つのPHPスクリプトを使用して、移動するデータ量が大きくなります。私はサーバー側にデータをPOSTし、php://入力ストリームを使用してWebサーバー側に保存します。メモリ制限に達するのを防ぐために、データはPOST要求ごとに500kBのチャンクに分割されます。すべてこれはうまく動作します。PHPで使用する圧縮方式は?

帯域幅を節約して速度を上げるために、データを圧縮してから、もう一方の端で受信すると圧縮して圧縮します。私は仕事をすることができます機能の3つのペアを見つけましたが、私が使用するかを決めることはできません。

ペア

あなたは何を勧めますか?なぜですか?

UPDATE:私はzlibのよくある質問をお読みください。

gzip形式(gzencode)は、名前や最終更新日など、単一のファイルについてのディレクトリ情報を保持するように設計されました。一方、zlibフォーマット(gzcompress)は、メモリ内および通信チャネルアプリケーション向けに設計されており、よりコンパクトなヘッダとトレーラを備え、gzipよりも速い整合性チェックを使用します。

+1

'gzdecode()'はまだPHPでは利用できないようですので、避けてください。 –

+1

'gzdecode()'はPHP 5.4.0以上でのみ定義されています:http://php.net/manual/en/function.gzdecode.php –

答えて

62

これらはすべて使用できます。 3間の微妙な違いがあります。

  • gzencode()は、GZIPファイル形式、gzipコマンドラインツールと同じように使用しています。このファイル形式には、オプションのメタデータ、DEFLATE圧縮データ、およびCRC32チェックサムと長さチェックを含むフッターを含むヘッダーがあります。
  • gzcompress()は、ZLIBフォーマットを使用します。これは、圧縮フォーマットを識別するためだけの短いヘッダー、DEFLATE圧縮データ、およびADLER32チェックサムを含むフッターを備えています。
  • gzdeflate()は、他の両方のフォーマットの基礎となる生のDEFLATEアルゴリズムを単独で使用します。

3人とも、同じアルゴリズムをフードで使用しています。 gzencode()は元のファイル名と他の環境データを含む機能を追加します(これは文字列を圧縮するだけでは使用されません)。 gzencode()gzcompress()は両方ともチェックサムを追加するので、アーカイブの完全性を検証できます。これは、信頼性の低い送信および保存方法よりも便利です。すべてがローカルに保存されていて追加のメタデータが必要ない場合は、gzdeflate()で十分です。移植性のために、gzencode()(GZIP形式)をお勧めします。このツールは他のツールの中ではおそらくgzcompress()(ZLIB形式)よりも優れています。

+3

ほぼ正しいです。私はちょっと調べてみましたが、gzencodeはどんなヘッダデータでもないようです - それはちょうど異なるヘッダデータを持っています。 –

+2

@ミラン私は、あなたは "gzcompressにはヘッダデータがないわけではなく、別のヘッダデータしか持っていない"ということを意味すると思います。 – thomasrutter

4

すべてのメソッドは基本的に同じですが、それらの違いはほとんどヘッダーにあります。個人的に私はgzencodeを使うでしょう、これはgzipユーティリティへのコマンドライン呼び出しと等しい出力を生成します。

39

私はPHPのエキスパートではありません。質問には答えられませんが、ここでは多くの推測が行われており、あいまいな情報が提供されているようです。

DEFLATEは、ZLIB、GZIPなどで使用される圧縮アルゴリズムの名前です。理論的には、GZIPは代替圧縮アルゴリズムをサポートしていますが、実際には何もありません。

"GZIPアルゴリズム"のようなものはありません。 GZIPはDEFLATEアルゴリズムを使用し、フレーミングデータを圧縮データの周りに置きます。 GZIPを使用すると、ファイル名、ファイルの時刻、CRC、コメントなどを追加できます。このメタデータはオプションですが、多くのジッパーはそれを省略します。

ZLIBは、限られたメタデータセットと、特定の2バイトのヘッダーを除いて、同様です。

これはすべてIETF RFC 1950,1951および1952にあります。

「gzipアルゴリズムはDEFLATEよりも圧縮率が高い」というのはナンセンスです。 gzipアルゴリズムはありません。また、GZIPフォーマットで使用されるアルゴリズムはDEFLATEです。

+0

これを明確にしていただきありがとうございます。これを読むまでは何も意味がありませんでした... – rvighne

関連する問題