ホームページ  >  記事  >  バックエンド開発  >  PHP が nginx の mod_zip モジュールを呼び出して ZIP ファイルをパッケージ化する_PHP チュートリアル

PHP が nginx の mod_zip モジュールを呼び出して ZIP ファイルをパッケージ化する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:28:381169ブラウズ

php自体には、zipファイルを生成できるzipモジュールがあります。ただし、この zip モジュールはパッケージ化にローカル ファイルのみを使用できます。パッケージ化して出力する必要があるファイルがネットワークから取得される場合は、まず一時ファイルを保存する必要があります。これは、ファイル数が多い場合やファイルが大きい場合に問題になります。さらに、PHP を使用して大きなパッケージ化されたファイルを出力すると、PHP プロセスに多くの時間がかかり、同時実行機能に影響します。

nginx にはサードパーティ モジュール mod_zip があります。 zip パッケージをエクスポートすることもできます。これは X-Accel-Redirect に似ています。php で対応するファイルのパスとその他の情報を出力し、特別な応答ヘッダーを与えるだけです。

nginx zip モジュールは、応答ヘッダー X-Archive-Files: zip を使用します。この応答ヘッダーが追加されると、nginx zip モジュールが応答本文を処理し、パッケージ化出力を完了します。

例:

コードをコピーします コードは次のとおりです:

printf("%s %d %s %sn", $crc32, $size, $url, $path );

梱包する商品を1つずつドキュメントに出力します。

$crc32 は、16 進数のファイル crc32 値です。省略して「-」に置き換えることもできます。ただし、この方法では、Range を使用してチャンクでダウンロードし、ブレークポイントからダウンロードを再開することはできません。
$size はファイル サイズの 10 進整数です。
$url はパッケージ化されるソースアドレスです。ローカル ファイルをパッケージ化する場合は、まず nginx で内部パスを作成します。
$path は zip パッケージ内のパスです。

ただし、これでは空のディレクトリは作成されません。一方、zip 形式では最初から空のディレクトリが定義されておらず、後の標準とソフトウェアでは、/ で終わるサイズ 0 のファイルを追加することでこれを実装しました。現時点では、まず nginx で /_0 などにサイズ 0 の内部ファイルを作成する必要があります。次に出力します

コードをコピーします コードは次のとおりです:

printf("%s %d %s %sn", '00000000', 0, '/_0', $path.'/' );

中国語のパスをサポートしたい場合は、X-Archive-Charset: utf8 のような応答ヘッダーを使用でき、その内容は出力するエンコーディングになります。 nginx zip モジュールは、規格に従ってデータを utf8 標準形式に変換します。ただし、各ソフトウェアはこの zip 規格のサポートが異なります。たとえば、Windows の zip ディレクトリはこれをサポートしておらず、gbk エンコードでのみ直接出力できます。他のソフトウェアにもさまざまなエンコード サポート効果があります。テストされた winrar、7zip、および Windows zip ディレクトリの中で、winrar はこれらを非常によくサポートできます。 7zip は、一部の空の中国語ディレクトリをサイズ 0 のファイルに変換する場合があります。したがって、これは依然として自分で検討して対処する必要があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/781816.html技術記事 PHP 自体には、zip ファイルを生成できる zip モジュールがあります。ただし、この zip モジュールはパッケージ化にローカル ファイルのみを使用できます。パッケージ化して出力する必要があるファイルがインターネットから取得される場合は、まず一時ファイルを保存する必要があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。