我正在尝试向我的网站添加功能,用户可以通过单个.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);
修改
我正在努力获得所提供的答案。我刚刚尝试了最近的编辑并得到了这个错误
]
答案 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”;