0

Apacheを介してphp経由でファイルを提供しています。比較的大きなファイル (私は 350 MB の zip で作業しています) がずっとダウンロードされているように見えますが、クライアントではゼロバイトのファイルとして表示されるという問題があります。

一度に 1 つのファイルのみが提供され、提供されるファイルは zip ファイルのみです。小さいファイルでは問題ありません。(例: 70MB)。時間とメモリの制限を、一見過度に寛大な値に引き上げました (php と php.ini の両方で)。約 20 ~ 30 秒後にダウンロードが完了したように見えますが、Firefox と Chrome の両方で良い結果が得られません。

Firefox: エラーメッセージなし。保存または開くためのダイアログが表示されます。ゼロバイトファイルとして保存されます。開くように指示された場合、winzip はファイルが壊れているというエラー メッセージを表示します。Chrome: 約 20 秒後、「このウェブページは利用できません」と表示されます。「エラーコード: ERR_CONTENT_LENGTH_MISMATCH」とも表示されます

これが何かを意味するかどうかはわかりませんが、Chrome の開発ツールでネットワーク アクティビティを調べたところ、70 MB のファイルが正しく提供された後、[ステータス] の下に (キャンセルされた) と表示されました。

phpコードは次のとおりです。

ini_set('memory_limit', '500M');  //also see memory_limit in php.ini
set_time_limit(60);  //also max_execution_time in php.ini
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream'); //also tried application/zip
header('Content-Disposition: inline; filename='.basename($fileLocation));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileLocation));
ob_clean();
flush();
readfile($fileLocation);
exit;

ありがとうございました!

4

1 に答える 1

1

350 MB を 60 秒 (制限時間) でダウンロードすると、1 秒あたり 5.8 MB になります。私には挑戦的に聞こえます。制限時間を変更するだけです:

set_time_limit(60*30);  //also max_execution_time in php.ini
于 2013-09-12T10:42:24.290 に答える