php自体には、zipファイルを生成できるzipモジュールがあります。ただし、この zip モジュールはパッケージ化にローカル ファイルのみを使用できます。パッケージ化して出力する必要があるファイルがネットワークから取得される場合は、まず一時ファイルを保存する必要があります。これは、ファイル数が多い場合やファイルが大きい場合に問題になります。さらに、PHP を使用して大きなパッケージ化されたファイルを出力すると、PHP プロセスに多くの時間がかかり、同時実行機能に影響します。
nginx にはサードパーティ モジュール mod_zip があります。 zip パッケージをエクスポートすることもできます。これは X-Accel-Redirect に似ています。php で対応するファイルのパスとその他の情報を出力し、特別な応答ヘッダーを与えるだけです。
nginx zip モジュールは、応答ヘッダー X-Archive-Files: zip を使用します。この応答ヘッダーが追加されると、nginx zip モジュールが応答本文を処理し、パッケージ化出力を完了します。
例:
$crc32 は、16 進数のファイル crc32 値です。省略して「-」に置き換えることもできます。ただし、この方法では、Range を使用してチャンクでダウンロードし、ブレークポイントからダウンロードを再開することはできません。
$size はファイル サイズの 10 進整数です。
$url はパッケージ化されるソースアドレスです。ローカル ファイルをパッケージ化する場合は、まず nginx で内部パスを作成します。
$path は zip パッケージ内のパスです。
ただし、これでは空のディレクトリは作成されません。一方、zip 形式では最初から空のディレクトリが定義されておらず、後の標準とソフトウェアでは、/ で終わるサイズ 0 のファイルを追加することでこれを実装しました。現時点では、まず nginx で /_0 などにサイズ 0 の内部ファイルを作成する必要があります。次に出力します