zip生成函数生成空白文件

时间:2012-03-26 12:44:39

标签: php zip

我正在使用此功能生成zip文件:

function create_zip($files = array(),$destination = '',$overwrite = false) {
  //if the zip file already exists and overwrite is false, return false
  if(file_exists($destination) && !$overwrite) { return false; }
  //vars
  $valid_files = array();
  //if files were passed in...
  if(is_array($files)) {
    //cycle through each file
    foreach($files as $file) {
      //make sure the file exists
      if(file_exists($file)) {
        $valid_files[] = $file;
      }
    }
  }
  //if we have good files...
  if(count($valid_files)) {
    //create the archive
    $zip = new ZipArchive();
    if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
      return false;
    }
    //add the files
    foreach($valid_files as $file) {
      $zip->addFile($file,$file);
      //echo $file;
    }
    //debug
    //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;

    //close the zip -- done!
    $zip->close();

    //check to make sure the file exists
    echo $destination;
    return file_exists($destination);
  }
  else
  {
    return false;
  }
}

我正在使用它来压缩一个未经改动的Wordpress安装。(http://wordpress.org/)但是由于某种原因,wp-content文件夹中有一个用它的名字生成的“ghost”空文件。文件夹(以及其他所有内容)本身正确压缩,但大多数解压缩应用程序(包括php自己的extractTo())在由于名称冲突而到达此不需要的文件时会中断。

我查看了文件夹/文件结构,据我所知,这个与网站中其他文件夹的唯一区别在于它是最大的5.86 mb。

有人可以建议修复/解决方法吗?

1 个答案:

答案 0 :(得分:0)

这是压缩文件夹的示例。

        <?php
        function Create_zipArch($archive_name, $archive_folder)
        {
            $zip = new ZipArchive;
            if ($zip->open($archive_name, ZipArchive::CREATE) === TRUE)
            {
                $dir = preg_replace('/[\/]{2,}/', '/', $archive_folder . "/");

                $dirs = array($dir);
                while (count($dirs))
                {
                    $dir = current($dirs);
                    $zip->addEmptyDir($dir);

                    $dh = opendir($dir);
                    while ($file = readdir($dh))
                    {
                        if ($file != '.' && $file != '..')
                        {
                            if (is_file($file))
                                $zip->addFile($dir . $file, $dir . $file);
                            elseif (is_dir($file))
                                $dirs[] = $dir . $file . "/";
                        }
                    }
                    closedir($dh);
                    array_shift($dirs);
                }

                $zip->close();
                $result='success';
            }
            else
            {
                $result='failed';
            }
            return $result;
        }

        $zipArchName = "ZipFileName.zip"; // zip file name
        $FolderToZip = "zipthisfolder"; // folder to zip

        echo Create_zipArch($zipArchName, $FolderToZip);
        ?>