Zip对象无效或单元化

时间:2013-11-17 10:27:55

标签: php 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();
       } }

我正在警告:ZipArchive::addFile() [function.ZipArchive-addFile]:无效或联合的Zip对象。可能有什么问题?我尝试了很多方法但是徒劳无功。 当我选择一个文件时,我能够创建并启动下载。但是,当我选择多个文件时,我会遇到上述错误。

4 个答案:

答案 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 函数。