Я создал веб-страницу, которая отображает список миниатюр изображений. Пользователь может выбрать изображения с помощью флажка рядом с миниатюрой, а затем загрузить выбранные изображения.
Форма выполняет загрузку php-файла, который создает zip-файл с помощью функции ZipArchive, а затем удаляет файл после загрузки.
Вот HTML-форма с разметкой для одного из изображений:
<form name="download" method="post" action="includes/download.php">
<input type="hidden" name="zipname" value="images.zip">
<input class="button" type="submit" value="Download Selected">
<ul>
<li>
<img src="https://web-answers.ru/wp-content/uploads/2019/03/image_01_thumb.jpg"/>
<input type="checkbox" name="files[]" value="images/image_01.jpg">
</li>
</ul>
</form>
и файл загрузки php содержит:
$files = $_POST['files'];
$zipname = $_POST['zipname'];
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
unlink ($zipname);
?>
До сих пор это прекрасно работает, пока файл не превышает 150 МБ, а затем не удается. Когда он пытается загрузить большой файл, время ожидания истекает, и я получаю сообщение «Ошибка файла не найдена», после ошибки я вижу, что zip-файл был создан и содержит все выбранные файлы (поэтому я знаю, что он частично работает), но как по тайм-ауту также не удалось удалить заархивированный файл.
Я проверил максимальный размер файла для функции ZipArchive и, если я не ошибаюсь, он сможет обрабатывать файлы до 4 ГБ. Кто-нибудь знает, почему это может происходить?
Заранее благодарю за любую помощь.
Задача ещё не решена.
Других решений пока нет …