好得很程序员自学网

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

php ZipArchive打包压缩zip文件实例 - php高级应用

php ZipArchive打包压缩zip文件实例

ZipArchive类是一个文件压缩解压类是一个php自来的zip类,我们可以直接简单创建一个类然后就能实现打包了,下面小编给各位介绍一下吧,有需要了解的朋友可进入参考.

这里我采用的是php自带的ZipArchive类

a) 我们只需要new一个ZipArchive对象,然后使用open方法创建一个zip文件,接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中,最好还得记得关闭该对象。

b) 注意点:使用open方法的时候,第二个参数$flags是可选的,$flags用来指定对打开的zip文件的处理方式,共有四种情况

i.ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉

ii. ZIPARCHIVE::CREATE如果指定的zip文件不存在,则新建一个

iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错  

iv.  ZIPARCHIVE::CHECKCONS

一、解压缩zip文件, 代码如下:

$zip  =  new  ZipArchive; //新建一个ZipArchive的对象   /*   通过ZipArchive的对象处理zip文件   $zip->open这个方法的参数表示处理的zip文件名。   如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE   */   if  ( $zip ->open( 'test.zip' ) === TRUE)  { //开源代码phpfensi.com   $zip ->extractTo( 'images' ); //假设解压缩到在当前路径下images文件夹的子文件夹php   $zip ->close(); //关闭处理的zip文件   } 

二、将文件压缩成zip文件,代码如下:

$zip  =  new  ZipArchive;  /*   $zip->open这个方法第一个参数表示处理的zip文件名。   第二个参数表示处理模式,ZipArchive::OVERWRITE表示如果zip文件存在,就覆盖掉原来的zip文件。   如果参数使用ZIPARCHIVE::CREATE,系统就会往原来的zip文件里添加内容。   如果不是为了多次添加内容到zip文件,建议使用ZipArchive::OVERWRITE。   使用这两个参数,如果zip文件不存在,系统都会自动新建。   如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE   */   if  ( $zip ->open( 'test.zip' , ZipArchive::OVERWRITE) === TRUE)  {  $zip ->addFile( 'image.txt' ); //假设加入的文件名是image.txt,在当前路径下   $zip ->close();  } 

三、文件追加内容添加到zip文件,代码如下:

$zip  =  new  ZipArchive;  $res  =  $zip ->open( 'test.zip' , ZipArchive::CREATE);  if  ( $res  === TRUE) {  $zip ->addFromString( 'test.txt' ,  'file content goes here' );  $zip ->close(); //开源代码phpfensi.com   echo   'ok' ;  }  else  {  echo   'failed' ;  }  

例子,执行打包代码如下:

import( 'ORG.Util.FileToZip' );    // 打包下载     $cur_file  = getcwd (). '/dimg/2014052916/' ;    $handler  = opendir( $cur_file );  //$cur_file 文件所在目录     $download_file  =  array ();    $i  = 0;    while ( ( $filename  = readdir( $handler )) !== false ) {    if ( $filename  !=  '.'  &&  $filename  !=  '..' ) {    $download_file [ $i ++] =  $filename ;   }   }    closedir ( $handler );    $scandir = new  traverseDir( $cur_file , $save_path );  //$save_path zip包文件目录     $scandir ->tozip( $download_file ); 

FileToZip 类,代码如下:

<?php  /**    * 遍历目录,打包成zip格式    */   class  traverseDir{    public   $currentdir ; //当前目录     public   $filename ; //文件名     public   $fileinfo ; //用于保存当前目录下的所有文件名和目录名以及文件大小     public   $savepath ;    public   function  __construct( $curpath , $savepath ){    $this ->currentdir= $curpath ; //返回当前目录     $this ->savepath= $savepath ; //返回当前目录    }    //遍历目录     public   function  scandir( $filepath ){    if  ( is_dir ( $filepath )){    $arr =scandir( $filepath );    foreach  ( $arr   as   $k => $v ){    $this ->fileinfo[ $v ][]= $this ->getfilesize( $v );   }   } else  {    echo   "<script>alert('当前目录不是有效目录');</script>" ;   }   }    /**    * 返回文件的大小    *    * @param string $filename 文件名    * @return 文件大小(KB)    */     public   function  getfilesize( $fname ){    return   filesize ( $fname )/1024;   }      /**    * 压缩文件(zip格式)    */     public   function  tozip( $items ){    $zip = new  ZipArchive();    $zipname = date ( 'YmdHis' ,time());    if  (! file_exists ( $zipname )){    $zip ->open( $savepath . $zipname . '.zip' ,ZipArchive::OVERWRITE); //创建一个空的zip文件     for  ( $i =0; $i < count ( $items ); $i ++){    $zip ->addFile( $this ->currentdir. '/' . $items [ $i ], $items [ $i ]);   }    $zip ->close();    $dw = new  download( $zipname . '.zip' , $savepath );  //下载文件     $dw ->getfiles();   unlink( $savepath . $zipname . '.zip' );  //下载完成后要进行删除    }   }  }    /**    * 下载文件    *    */   class  download{    protected   $_filename ;    protected   $_filepath ;    protected   $_filesize ; //文件大小     protected   $savepath ; //文件大小     public   function  __construct( $filename , $savepath ){    $this ->_filename= $filename ;    $this ->_filepath= $savepath . $filename ;   }    //获取文件名     public   function  getfilename(){    return   $this ->_filename;   }      //获取文件路径(包含文件名)     public   function  getfilepath(){    return   $this ->_filepath;   }      //获取文件大小     public   function  getfilesize(){    return   $this ->_filesize=number_format( filesize ( $this ->_filepath)/(1024*1024),2); //去小数点后两位    }    //下载文件的功能     public   function  getfiles(){    //检查文件是否存在     if  ( file_exists ( $this ->_filepath)){    //打开文件     $file  =  fopen ( $this ->_filepath, "r" );    //返回的文件类型    Header( "Content-type: application/octet-stream" );    //按照字节大小返回    Header( "Accept-Ranges: bytes" );    //返回文件的大小    Header( "Accept-Length: " . filesize ( $this ->_filepath));    //这里对客户端的弹出对话框,对应的文件名    Header( "Content-Disposition: attachment; filename=" . $this ->_filename);    //修改之前,一次性将数据传输给客户端     echo   fread ( $file ,  filesize ( $this ->_filepath));    //修改之后,一次只传输1024个字节的数据给客户端     //向客户端回送数据     $buffer =1024; //     //判断文件是否读完     while  (! feof ( $file )) {    //将文件读入内存     $file_data = fread ( $file , $buffer );    //每次向客户端回送1024个字节的数据     echo   $file_data ;   }     fclose( $file );   } else  {    echo   "<script>alert('对不起,您要下载的文件不存在');</script>" ;   }   }  }   ?> 

查看更多关于php ZipArchive打包压缩zip文件实例 - php高级应用的详细内容...

  阅读:46次