phpはnginxのmod_を呼び出します。ZIPモジュール包装ZIPファイル


php自体にzipモジュールがありますので、zipファイルを生産できます。このzipモジュールはローカルファイルのみで包装できます。パッケージ出力が必要なファイルがネットワークから来たら、先に仮ファイルを保存します。書類の数が多い時やファイルが大きい時には、杯具です。また、大きなパッケージファイルをphpから出力すると、phpプロセスの時間がかかり、合併能力に影響を与えます。
inxは第三者モジュールがあります。mod_zipzipパッケージも出力できます。X-Accel-redlectと少し似ていますが、phpがそれぞれのファイルのパスなどの情報を出力して、特殊な応答ヘッダを与えるだけでいいです。
nginx zipモジュールで使用されるレスポンスヘッダはX-Archive-Files:zipです。このレスポンスヘッダを加えると、inx zipモジュールは本文に応答してパッケージ出力を完了します。
例えば、

printf("%s %d %s %s
", $crc32, $size, $url, $path );
はパッケージするファイルを逐条出力します。
$crc 32は16進数のファイルcrc 32の値です。提供しなくてもいいです。代わりに「-」を使ってもいいです。でも、これではRangeでブロックを分けてダウンロードすることができなくて、断点的に続けて伝えました。sizeはファイルサイズの十進数の整数です。urlは包装するソースの住所です。ローカルファイルを包装するなら、まずinxの中でinternal pathを作ってもいいです。pathはzipパッケージのパスです。
しかし、空のディレクトリは作成できません。一方、zip形式は最初から空のディレクトリが定義されていませんでしたが、その後の標準とソフトウェアはいずれも1/末尾の0サイズのファイルを追加することによって実現されました。この時、まずinxの中でinternalの0サイズのファイルを作らなければなりません。0です。その後、

printf("%s %d %s %s
", '00000000', 0, '/_0', $path.'/');
を出力し、中国語の経路をサポートするためには、X−ARrhive−CShaset:utf 8のような応答ヘッダを使用して、コンテンツはあなたが出力する符号化です。nginx zipモジュールは標準でutf 8の標準フォーマットに変換されます。しかし、各ソフトウェアはこのzipの標準に対して違っています。例えば、windowsのzipディレクトリはサポートされていません。gbkコードで直接出力するしかありません。他のソフトはエンコードに対するサポート効果もそれぞれ違います。テストしたwindrar、7 zip、windows zipのディレクトリの中で、windrarはすべてとても良い支持です。7 zipは一部の中国語の空きディレクトリを0サイズのファイルに変更することがあります。ですから、これは自分で考えて処理します。