Я пытаюсь добавить функциональность на свой сайт, где пользователи могут загружать несколько файлов изображений через одну .zip
папку. В настоящее время у меня этот код выполняется, но когда я открываю загруженный zip файл, он извлекает другой архив zip файла my-archive (3) 2.zip.cpgz
и каждый раз, когда я пытаюсь его открыть, он извлекает еще один zip файл.
Вот мой базовый код, использующий встроенную функцию zip php.
$image1 = "http://cdn.screenrant.com/wp-content/uploads/Darth-Vader-voiced-by-Arnold-Schwarzenegger.jpg";
$image2 = "http://cdn.screenrant.com/wp-content/uploads/Star-Wars-Logo-Art.jpg";
$files = array($image1, $image2);
$zipname = 'file.zip';
$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);
РЕДАКТИРОВАТЬ
Я стараюсь получить предоставленный ответ на работу. Я просто попробовал самое последнее редактирование и получил эту ошибку
]
Вы должны загружать внешние файлы, а затем архивировать их.
$image1 = "http://cdn.screenrant.com/wp-content/uploads/Darth-Vader-voiced-by-Arnold-Schwarzenegger.jpg";
$image2 = "http://cdn.screenrant.com/wp-content/uploads/Star-Wars-Logo-Art.jpg";
$files = array($image1, $image2);
$tmpFile = tempnam('/tmp', '');
$zip = new ZipArchive;
$zip->open($tmpFile, ZipArchive::CREATE);
foreach ($files as $file) {
// download file
$fileContent = file_get_contents($file);
$zip->addFromString(basename($file), $fileContent);
}
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=file.zip');
header('Content-Length: ' . filesize($tmpFile));
readfile($tmpFile);
unlink($tmpFile);
В приведенном выше примере я использовал функцию file_get_contents
, поэтому, пожалуйста, включите allow_url_fopen
или используйте curl для загрузки файлов.
Привет, ребята выше код работал отлично. Загрузка изображений работала только на живом сервере (только если мы используем https или http). Но это не работает в локальной сети (если мы используем https или http). Если вы используете локальную, следуйте этому → Измените только строки ниже. Для локального использования ниже img's $ image1 = "C: /Users/User/Pictures/Saved Pictures/chandamama.jpg"; $ image2 = "C:/Пользователи/Пользователь/Изображения/Сохраненные изображения /beautifull.jpg"; Не используйте ниже IMG для локальных. $ image1 = " http://cdn.screenrant.com/wp-content/uploads/Darth-Vader-voiced-by-Arnold-Schwarzenegger.jpg "; $ image2 = " http://cdn.screenrant.com/wp-content/uploads/Star-Wars-Logo-Art.jpg ";
file_get_contents
согласно вашему примеру, до сих пор не работает.tempnam
.