1

PHPでzipファイルをレンダリングしようとしています。コード:

header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');

ダウンロードしたファイルは、わずか数バイトです。これはエラー メッセージです。

<br /> <b>Fatal error</b>: Allowed memory size of 16777216 bytes exhausted (tried to allocate 41908867 bytes) in <b>/var/www/common_index/main.php</b> on line <b>217</b><br />

php.ini で memory_limit を増やしたくありません。グローバル設定をいじらずに大きな zip ファイルを適切にレンダリングする別の方法は何ですか?

4

2 に答える 2

4

ダウンロードをストリーミングして、メモリを圧迫しないようにします。小さな例:

$handle = fopen("exampe.zip", "rb");
while (!feof($handle)) {
    echo fread($handle, 1024);
    flush();
}
fclose($handle);

ダウンロード用の正しい出力ヘッダーを追加すると、問題が解決するはずです。

于 2011-06-08T17:49:37.583 に答える
0

readfile()PHP は、関数を介して最初にバイナリ ファイルをメモリに格納せずに、バイナリ ファイルを Apache に直接出力する簡単な方法を実際に提供します。

header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
readfile('file.zip');
于 2014-08-04T03:33:18.563 に答える