将多个图像下载到zip中

时间:2015-01-29 19:03:18

标签: php

我正在尝试向我的网站添加功能,用户可以通过单个.zip文件夹下载多个图像文件。目前我已执行此代码但当我打开下载的zip文件时,它会提取另一个zip文件my-archive (3) 2.zip.cpgz,每次我尝试打开它时,它都会提取另一个zip文件。

这是我使用php native zip功能的基本代码。

$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);

修改

我正在努力获得所提供的答案。我刚刚尝试了最近的编辑并得到了这个错误

 []

2 个答案:

答案 0 :(得分: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下载文件。

答案 1 :(得分:0)

上面代码的家伙们工作得很好。图片下载仅在实时服务器上有效(仅当我们使用https或http时)。但这不适用于本地(如果我们使用https或http)。 如果您使用本地,请遵循此->仅更改以下几行。 供img下方的本地使用  $ image1 =“ C:/用户/用户/图片/保存的图片/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”;