加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php ZipArchive压缩函数介绍实例

发布时间:2022-06-15 11:19:13 所属栏目:PHP教程 来源:互联网
导读:在php中生成zip文件我们只要使用一个php zip压缩ZipArchive函数就可以了,下面小编来给大家总结两个实现一个是利用ZipArchive生成zip,另一个压缩文件夹下所有文件. 用ZipArchive压缩文件,这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在
  在php中生成zip文件我们只要使用一个php zip压缩ZipArchive函数就可以了,下面小编来给大家总结两个实现一个是利用ZipArchive生成zip,另一个压缩文件夹下所有文件.
 
  用ZipArchive压缩文件,这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库。
 
  例1、生成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) {  
              $file_info_arr= pathinfo($file);  
              $zip->addFile($file,$file_info_arr['basename']);//去掉层级目录  
          }  
          //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  
          return file_exists($destination);  
      }  
      else
      {  
          return false;  
      }  
  }  
   
  define('ROOTPATH',dirname ( __FILE__ )); //网站路径  
   
  $files_to_zip = array(  
      ROOTPATH.DIRECTORY_SEPARATOR.'PHP+jQuery+Cookbook.pdf',  
      ROOTPATH.DIRECTORY_SEPARATOR.'TurboListerZeroTemplate.csv'
  );  
  //if true, good; if false, zip creation failed  
  $filename='my-archive.zip';  
  $result = create_zip($files_to_zip,$filename);
  例2 、压缩文件夹下面的所有文件,代码如下:
 
  <?php  
  /*  
  php zip压缩文件夹下面的所有文件  
  */
  class HZip  
  {  
    /**  
     * 添加文件和子目录的文件到zip文件  
     * @param string $folder  
     * @param ZipArchive $zipFile  
     * @param int $exclusiveLength Number of text to be exclusived from the file path.  
     */
    private static function folderToZip($folder, &$zipFile, $exclusiveLength) {  
      $handle = opendir($folder);  
      while (false !== $f = readdir($handle)) {  
        if ($f != '.' && $f != '..') {  
          $filePath = "$folder/$f";  
          // Remove prefix from file path before add to zip.  
          $localPath = substr($filePath, $exclusiveLength);  
          if (is_file($filePath)) {  
            $zipFile->addFile($filePath, $localPath);  
          } elseif (is_dir($filePath)) {  
            // 添加子文件夹  
            $zipFile->addEmptyDir($localPath);  
            self::folderToZip($filePath, $zipFile, $exclusiveLength);  
          }  
        }  
      }  
      closedir($handle);  
    }  
   
    /**  
     * Zip a folder (include itself).  
     * Usage:  
     *   HZip::zipDir('/path/to/sourceDir', '/path/to/out.zip');  
     *  
     * @param string $sourcePath Path of directory to be zip.  
     * @param string $outZipPath Path of output zip file.  
     */
    public static function zipDir($sourcePath, $outZipPath)  
    {  
      $pathInfo = pathInfo($sourcePath);  
      $parentPath = $pathInfo['dirname'];  
      $dirName = $pathInfo['basename'];  
      $sourcePath=$parentPath.'/'.$dirName;//防止传递'folder' 文件夹产生bug  
      $z = new ZipArchive();  
      $z->open($outZipPath, ZIPARCHIVE::CREATE);//建立zip文件  
      $z->addEmptyDir($dirName);//建立文件夹  
      self::folderToZip($sourcePath, $z, strlen("$parentPath/"));  
      $z->close();  
    }  
  }  
   
  //使用方法  
  HZip::zipDir('yourlife', 'yourlife.zip');  
  ?>
  1.ZipArchive::addEmptyDir
 
  添加一个新的文件目录
 
  2.ZipArchive::addFile
 
  将文件添加到指定zip压缩包中。
 
  3.ZipArchive::addFromString
 
  添加的文件同时将内容添加进去
 
  4.ZipArchive::close
 
  关闭ziparchive
 
  5.ZipArchive::extractTo
 
  将压缩包解压
 
  6.ZipArchive::open
 
  打开一个zip压缩包
 
  7.ZipArchive::getStatusString
 
  返回压缩时的状态内容,包括错误信息,压缩信息等等
 
  8.ZipArchive::deleteIndex
 
  删除压缩包中的某一个文件,如:deleteIndex(0)删除第一个文件
 
  9.ZipArchive::deleteName
 
  删除压缩包中的某一个文件名称,同时也将文件删除。

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读