LAMP スタック上で ZIP ファイルを動的にストリーミングする方法
課題
アーカイブの作成Web サービスで大きなファイルをオンザフライで使用すると、パフォーマンスの問題やリソースの制約が発生する可能性があります。従来の方法では、一時 zip ファイルの作成が必要となるため、CPU、ディスク、メモリのオーバーヘッドが発生します。
popen() と flash() を使用したストリーミング ソリューション
これらの欠点を回避するにはの場合は、zip ファイルの作成をユーザーに直接ストリーミングすることを検討してください。これは、popen() または proc_open() を使用してストリーミング パイプライン コマンド (zip など) を実行することで実現できます。これを flash() と組み合わせると、作成中の zip ファイルを効率的にストリーミングできます。
改訂された例
ここでは、提起されたいくつかの警告に対処する更新されたコード例を示します。 @Benji によるコメント:
注: 当初は flash() が推奨されていましたが、大きなファイルや低速ネットワークのループ内での使用は避けることをお勧めします。これにより、バッファ オーバーランの問題が発生する可能性があります。
その他の考慮事項
マルチプロセッサ サーバーの場合は、効率的で非ブロッキングな I を実現するために、http モジュールと child_process モジュールで nodeJS を使用することを検討してください。 /O.
zip ファイルのサイズが事前に不明であるため、このシナリオでは Content-Length ヘッダーを設定することはできません。ただし、ストリーミングまたは不明なコンテンツの長さを示すヘッダーが存在するかどうかを調査することを検討してください。
以上が一時ファイルを作成せずに LAMP スタック上で ZIP ファイルを動的にストリーミングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。