0

ユーザーが最大 1GB のサイズのファイルをダウンロードできるようにしたいのですが、私のコードによれば、113MB のファイルしかダウンロードできません...

header('Content-type: application/zip');

//open/save dialog box
header('Content-Disposition: attachment; filename="check.zip"');

//read from server and write to buffer
readfile('check.zip');

大きなファイルをダウンロードする方法を誰か教えてもらえますか?

4

3 に答える 3

4

あなたが言ったことから、「メモリ不足」エラーが発生していると推測します。

その場合、おそらくドキュメントからのこのメモが興味深いかもしれません:

ノート:

readfile()は、大きなファイルを送信する場合でも、単独でメモリの問題を引き起こすことはありません。メモリ不足エラーが発生した場合は、出力バッファリングがob_get_level()でオフになっていることを確認してください。

そのため、出力バッファリングを停止するために、必要に応じてチェックob_get_level()して呼び出します。ob_end_flush()


または、次のようなこともできます。

$f = fopen("check.zip","rb");
while(!feof($f)) {
    echo fgets($f);
    flush();
}

別のオプションはこれです:

header("Location: check.zip");

これにより、ブラウザがcheck.zipファイルにリダイレクトされます。ダウンロードなので、既存のページに影響はありません。ページの残りの部分を出力して、ユーザーに「ダウンロードがすぐに開始されます」などのメッセージを表示することもできます。

于 2012-05-05T05:59:27.137 に答える
0

ファイルを一度にチャンクずつ読み取ってエコーするか、mod_sendfile のようなものを使用してそれを Not Your Problem にします。

于 2012-05-05T05:55:01.177 に答える
0

ファイルの書き込みバッファ チャンク サイズを最大の file まで増やします。これにより、リソースの使用率が低下し、ダウンロードは正常に機能します.

編集:

HTML5 webworkers を使用して、大きなサイズでダウンロードします。Webworkers はバックグラウンドで動作するため、大きなファイルをダウンロードできます。

于 2012-05-05T05:59:26.060 に答える