php实现文件夹打包类

使用实例:
 
<?php
<form method="post">
  压缩到服务器:
  <br>------------------<br>
  压缩目录:     <input name="zipdir" type="text" id="zipdir" />(例如./folder)<br>
  另存为路径和文件名:<input name="savename" type="text" id="savename" />(例如./folder/file.zip)(需要填写扩展名)<br>
  <input name="zip" type="submit" id="zip" value="压缩" /><br>
  <br><br><br>
 
  压缩并下载
  <br>------------------<br>
  文件所在目录:<input name="zipdowndir" type="text" id="zipdowndir" />(例如./folder)<br>
  <input name="zipdown" type="submit" id="zipdown" value="压缩并下载" />
  <br><br><br>
 
  在线解压zip
  <br>------------------<br>
  文件: <input name="unzipfile" type="text" id="unzipfile" />(例如./folder/file.zip)<br>
  解压到:<input name="unziptarget" type="text" id="unziptarget" />(例如./folder)<br>
  <input name="unzip" type="submit" id="unzip" value="解压" />
  <br><br><br>
 
  读取压缩文件内部文件信息和注释
  <br>------------------<br>
  文件:<input name="readfile" type="text" id="readfile" />(例如./folder/file.zip)<br>
  <input name="readfileinfo" type="submit" id="readfileinfo" value="读取内部文件信息" />
  <input name="readcomment" type="submit" id="readcomment" value="读取注释" />
</form>
<?
    echo "<p><p>rn";
    echo "<br>--------------------------<br>rn";
    echo "显示信息:rn";
    echo "<br>--------------------------<br>rn";
 
    $archive  = new PHPZip();
    if(!empty($zip))
    {
        $archive->Zip($zipdir, $savename);
    }
    elseif(!empty($zipdown))
    {
        $archive->ZipAndDownload($zipdowndir);
    }
    elseif(!empty($unzip))
    {
        $zipfile   = $unzipfile;
        $savepath  = $unziptarget;
        $array     = $archive->GetZipInnerFilesInfo($zipfile);
        $filecount = 0;
        $dircount  = 0;
        $failfiles = array();
        set_time_limit(0);  // 修改为不限制超时时间(默认为30秒)
 
        for($i=0; $i<count($array); $i++) {
            if($array[$i][folder] == 0){
                if($archive->unZip($zipfile, $savepath, $i) > 0){
                    $filecount++;
                }else{
                    $failfiles[] = $array[$i][filename];
                }
            }else{
                $dircount++;
            }
        }
 
             set_time_limit(30);
 
        printf("文件夹:%d    解压文件:%d    失败:%d<br>rn", $dircount, $filecount, count($failfiles));
        if(count($failfiles) > 0){
            foreach($failfiles as $file){
                printf("·%s<br>rn", $file);
            }
        }
    }
    elseif(!empty($readfileinfo))
    {
        $array = $archive->GetZipInnerFilesInfo($readfile);
        for($i=0; $i<count($array); $i++) {
            printf("<b>·%s</b><br>rn", $array[$i][filename]);
            foreach($array[$i] as $key => $value)
                printf("%s => %s<br>rn", $key, $value);
            print "rn<p>------------------------------------<p>rnrn";
        }
    }
    elseif(!empty($readcomment))
    {
        $comment = $archive->GetZipComment($readfile);
        printf("%s<br>rn", $comment);
    }
?>
 
?>