1

7-Zip を使用してディレクトリを圧縮し、Web ブラウザにダウンロードしたいと考えています。

ただし、ファイルに圧縮する代わりに、PHP でそのファイルの内容をブラウザーにフィードします...理想的には、アーカイブが作成されているときに、7-Zip で新しいアーカイブの内容を標準出力に書き込みたいと思います。 .. 同時に PHP にバッファをフラッシュさせ、データをブラウザに送信します。

ほら、私が作成しているアーカイブはかなり大きいです。ユーザーの観点から見ると、通常の方法を使用すると、[ダウンロード] をクリックすると、最初にアーカイブが作成されてファイルに保存され (約 10 分かかる場合があります)、そのファイルが PHP によってダウンロードされます。 . 私がやろうとしているのは、アーカイブと出力の両方のステップを 1 つのプロセスに結合することです。

誰かがこれについて意見を持っていますか?

これは、同じことをしようとしている SourceForge の他の誰かです...

http://sourceforge.net/projects/p7zip/forums/forum/383043/topic/3828566

=======

助けてくれてありがとう。最近、このトピックに関する優れた議論が StackOverflow に既に存在することを発見したため、このスレッドを閉じます。見る:

LAMP: ディスク/CPU のスラッシングなしで、その場でユーザーのために大きなファイルの .Zip を作成する方法

=======

これが私が行った最終的な解決策であり、私にとってはうまく機能しています。ほとんどすべてのプラットフォームで使用できる「InfoZip」プログラムを使用していることに注意してください。

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename="file.zip"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');

passthru("zip -8 -q -r - ./some_directory | cat");
4

3 に答える 3

1

これが私が行った最終的な解決策であり、私にとってはうまく機能しています。ほとんどすべてのプラットフォームで使用できる「InfoZip」プログラムを使用していることに注意してください。

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename="file.zip"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');

passthru("zip -8 -q -r - ./some_directory | cat");
于 2011-01-04T19:43:25.503 に答える
1

-so (データを標準出力に書き込む) オプションを指定して passthru を使用して 7z を実行してみてください。

7zip MIME タイプのダウンロード ヘッダーとコンテンツ タイプ ヘッダーを送信している限り、うまくいくと思います。

<?php
$filename = "somefile.7z";
$contentType = "application/x-7z-compressed";
header("Content-type: ".$contentType); // tell the browser your sending a 7zip file
header("Content-Disposition: attachment; filename=\"".$filename."\""); // use 'attachment' to force a download
passthru('/path/to/7z a -so <fileOrDirToBe7Zipped>');
?>

それが役立つことを願っています!

于 2011-01-04T17:10:29.350 に答える
-1

これはうまくいかないか、ひどくバグがあります。Web は実際にはこのようには機能しません。多くのブラウザーは、不完全なファイルを正しく処理できません (これは、ブラウザーが取得しようとしているものです)。「ファイルを生成しています。完了したら、ダウンロード リンクをメールでお送りします」と表示しないのはなぜですか。メッセージ、または「お待ちください。ファイルを生成しています。これには数分かかる場合があります。」メッセージ、進行状況メーターとともに?

于 2011-01-04T16:52:55.950 に答える