好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php生成zip压缩文件两个实例详解 - php高级应用

php生成zip压缩文件两个实例详解

在php中生成zip文件我们只要使用一个php zip压缩ZipArchive函数就可以了,下面小编来给大家总结两个实现一个是利用ZipArchive生成zip,另一个压缩文件夹下所有文件.

注意: ZipArchive来压缩文件,这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库.

例1,生成zip 压缩文件,代码如下:

<?php   /* 生成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' ,  //开源代码phpfensi测试数据       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' );   ?> 

ziparchive 可选参数:

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

删除压缩包中的某一个文件名称,同时也将文件删除.

查看更多关于php生成zip压缩文件两个实例详解 - php高级应用的详细内容...

  阅读:62次