Скачать несколько изображений в Zip

0

Я пытаюсь добавить функциональность на свой сайт, где пользователи могут загружать несколько файлов изображений через одну .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);

РЕДАКТИРОВАТЬ

Я стараюсь получить предоставленный ответ на работу. Я просто попробовал самое последнее редактирование и получил эту ошибку

Изображение 174551]

Теги:

2 ответа

5
Лучший ответ

Вы должны загружать внешние файлы, а затем архивировать их.

$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 для загрузки файлов.

  • 0
    Спасибо за ваш ответ. У меня та же проблема, хотя. Я использую file_get_contents согласно вашему примеру, до сих пор не работает.
  • 0
    Я проверил, у меня работает. Возможно проблема с разрешениями, вы можете попытаться создать временный файл, используя функцию tempnam .
Показать ещё 5 комментариев
0

Привет, ребята выше код работал отлично. Загрузка изображений работала только на живом сервере (только если мы используем 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 ";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню