Я пытаюсь сделать zip-файл в php. Код:
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 />
Я не хочу увеличивать memory_limit в php.ini. Каковы альтернативные способы правильного отображения больших zip-файлов без использования глобальных настроек?
Поток загрузки, поэтому он не задыхается от памяти. Крошечный пример:
$handle = fopen("exampe.zip", "rb"); while (!feof($handle)) { echo fread($handle, 1024); flush(); } fclose($handle);
Добавьте правильные выходные заголовки для загрузки, и вы должны решить проблему.
PHP на самом деле обеспечивает простой способ вывода двоичного файла непосредственно в Apache без его скопирования в память сначала с помощью функции readfile()
:
header('Content-Type: application/zip'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: attachment; filename="file.zip"'); readfile('file.zip');