好得很程序员自学网

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

php ZipArchive类使用实例详解 - php类库

php ZipArchive类使用实例详解

php ZipArchive可以说是php自带的一个函数了,他可对对文件进行压缩与解压缩处理,但是使用此类之前我们必须在php.ini中把extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库.

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,删除压缩包中的某一个文件名称,同时也将文件删除。

实例如下:

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

$zip  =  new  ZipArchive; //新建一个ZipArchive的对象   /*   通过ZipArchive的对象处理zip文件   $zip->open这个方法的参数表示处理的zip文件名。   如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE   */   if  ( $zip ->open( 'test.zip' ) === TRUE)  {  $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();  echo   'ok' ;  }  else  {  echo   'failed' ;  } 

四、将文件夹打包成zip文件,代码如下:

function  addFileToZip( $path ,  $zip ) {  $handler  = opendir( $path );  //打开当前文件夹由$path指定。   /*   循环的读取文件夹下的所有文件和文件夹   其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,   为了不陷于死循环,所以还要让$filename !== false。   一定要用!==,因为如果某个文件名如果叫'0',或者某些被系统认为是代表false,用!=就会停止循环   */   while  (( $filename  = readdir( $handler )) !== false) {  if  ( $filename  !=  "."  &amp;&amp;  $filename  !=  ".." ) { //文件夹文件名字为'.'和‘..’,不要对他们进行操作   if  ( is_dir ( $path  .  "/"  .  $filename )) { // 如果读取的某个对象是文件夹,则递归   addFileToZip( $path  .  "/"  .  $filename ,  $zip );  }  else  {  //将文件加入zip对象   $zip ->addFile( $path  .  "/"  .  $filename );  }  }  }  @ closedir ( $path );  }    $zip  =  new  ZipArchive();  if  ( $zip ->open( 'images.zip' , ZipArchive::OVERWRITE) === TRUE) {  addFileToZip( 'images/' ,  $zip );  //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法   $zip ->close();  //关闭处理的zip文件   } 

如果只知道文件名,而不知到文件的具体路径,可以搜索指定文件名的索引,再依靠索引获取内容,代码如下:

<?php  $zip  =  new  ZipArchive;  if  ( $zip ->open( 'test.zip' ) === TRUE) {     $index = $zip ->locateName( 'example.php' , ZIPARCHIVE::FL_NOCASE|ZIPARCHIVE::FL_NODIR);     $contents  =  $zip ->getFromIndex( $index );  }  ?> 

上面获取索引依靠 locateName方法,如果压缩包内多个路径下有同名文件,好像只能返回第一个的索引,如果要获取所有同名文件的索引,只能使用笨办法,循环搜索,代码如下:

<?php  $zip  =  new  ZipArchive;  if  ( $zip ->open( 'test.zip' ) === TRUE) {    for ( $i  = 0;  $i  <  $zip ->numFiles;  $i ++)     {        if (substr_count( $zip ->getNameIndex( $i ),  'example.php' )>0){          $contents  =  $zip ->getFromIndex( $i );                     }     }  }  ?> 

查看更多关于php ZipArchive类使用实例详解 - php类库的详细内容...

  阅读:40次