if(isset($_POST['items'])) {
// open zip
$zip_path = 'downloadSelected/download.zip';
$zip = new ZipArchive();
if ($zip->open($zip_path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== TRUE) {
die ("An error occurred creating your ZIP file.");
}
foreach ($_POST['items'] as $path) {
// generate filename to add to zip
$filepath = 'downloads/' . $path . '.zip';
if (file_exists($filepath)) {
$zip->addFile($filepath, $path . '.zip') or die ("ERROR: Could not add the file $filename");
}
else {
die("File $filepath doesnt exit");
}
$zip->close();
} }
我正在警告:ZipArchive::addFile()
[function.ZipArchive-addFile]:无效或联合的Zip对象。可能有什么问题?我尝试了很多方法但是徒劳无功。
当我选择一个文件时,我能够创建并启动下载。但是,当我选择多个文件时,我会遇到上述错误。
答案 0 :(得分:11)
正确缩进的力量!
您正在关闭循环中的zip文件。
如果我重新格式化你的代码,那就很明显了。
更正后的代码如下:
if(isset($_POST['items'])) {
// open zip
$zip_path = 'downloadSelected/download.zip';
$zip = new ZipArchive();
if ($zip->open($zip_path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== TRUE) {
die ("An error occurred creating your ZIP file.");
}
foreach ($_POST['items'] as $path) {
// generate filename to add to zip
$filepath = 'downloads/' . $path . '.zip';
if (file_exists($filepath)) {
$zip->addFile($filepath, $path . '.zip') or die ("ERROR: Could not add the file $filename");
} else {
die("File $filepath doesnt exit");
}
}
$zip->close();
}
答案 1 :(得分:9)
库本身会为您提供一个代码,以了解它失败的原因:
dose
答案 2 :(得分:1)
根据文档,您不能或打开模式标志,您只能在一种模式下打开。首先检查文件是否存在,并将模式设置为正确打开,看看是否有帮助。
答案 3 :(得分:0)
您也可能使用 php://output
作为文件名(不是针对问题作者,而是针对搜索此错误的任何人),ZipArchive 不支持这种情况。
如果您需要输出 zip 文件,请将其保存为临时文件,然后使用 readfile
函数。