質問

書いるPHPスクリプトを生成するgzippedファイルです。のアプローチや書式といった外観を構築し、文字列はPHPとgzcompress()文字列の前に書面でファイルの末尾に記述します。

現地に行って試験をクリプトとの大きなファイルを走へのメモリ割り当てます。この結果の文字列は大型化しないようにメモリ。

これを解決するために使用gzopen()およびgzwrite()を避ける配分大きな文字列はクリアしました。しかし、gzippedファイルで生成されgzwrite()のような利用の場合gzcompress().私は実験が異なるzipレベルにおいて接続されたことを示しています。んでもってgzdeflate()で終わるものと同様な結果としてgzwrite()がこのようにgzcompress().だけでなく、バイト(zlibヘッダー)とは異なるので、全体のファイルです。

なgzcompress()と違うことをしたがるからこれらのgzip機能PHP?があるので、いまでしか実現でき、結果gzcompress()を段階的に生産ありがとうございます。

役に立ちましたか?

解決

私は100%確かではないけど、私の推測では、gzcompressは、GZIP形式を使用し、gzopen / gzwrite ZLIBを使用することです。正直なところ、私は2つの違いは何であるかを伝えることはできませんが、私はGZIPが実際の圧縮のためZLIBを使用していることを知っています。

そのどれもかかわらず、問題ではないだろうということも可能です。 gzopen / gzwriteとgzipファイルを作成してみてくださいして、コマンドラインのgzipプログラムを使用して、それを解凍。それが動作する場合は、あなたのために動作します/ gzwriteをgzopen使用します。

他のヒント

の主な違いは、4バイト境界(またはそれが2である)へのパッド出力し、その後、少し余分な、gzwrite関数はSYNC_FLUSHオプションでZLIBを開始することである(0x00から0x00から0xFFの0xFFの0×03)。

あなたがZipファイルを作成するために、これらを使用している場合は、デフォルトのMACアーカイブユーティリティは、このフォーマットを受け入れないことを注意します。

私が言うことができるものから、SYNC_FLUSHはGZIPオプションで、PKZIPの/情報-ZIP形式で許可されていない、すべての.zipファイルおよびその誘導体から来ています。

あなたは、単一のdeflateブロックで、その結果、小さなファイル/テキストを収縮し、gzwriteで書かれた同じテキストにそれを比較した場合、

、あなたはデフレートブロックのヘッダ内のバイトの1つが異なる、2の違いを見ることができます1によって、および端部が上記バイトでパディングされます。結果は1つのdeflateブロックよりも大きい場合は、違いが積み始めます。圧縮ストリームブロックヘッダが偶数バイト整列されないように、この問題を解決することは困難です。誰もがZLIBを使用する理由があります。少数の人々も、その形式を書き換えしようとするのに十分な勇敢です!

また同様の問題が基本的にはそれほど広くはありませんが十分ram割り当てるphpいます。

その結省として文字列のテキストファイルを使用exec()をgzipファイルのファイルシステム.そのない理想的なソリューションがうまくいった私の状況です。

php.iniファイルでのmemory_limitパラメータを大きくしてみてください。

の両方gzcompress()およびgzopen()は、ブロックを圧縮するDEFLATEメソッドを使用します。 しかし、彼らは別のヘッダー/トレーラーを持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top