PHP压缩/解压文件

    PHP5.2以后,强化了对压缩文件的处理,不仅对zip算法,还包括rar算法、gzip算法等都有了相应的支持。今天,我来和大家分享一下用PHP处理zip文件。我们用到的是ZipArchive类,如果你安装了PHP5.2以上,无需做任何配置即可开始使用该类。

创建压缩文件:
    

<?php
    //实例化类
    $zip = new ZipArchive();
    //需要打开的zip文件,文件不存在将会自动创建
    $filename = "./test.zip";
     
    if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
        //如果是Linux系统,需要保证服务器开放了文件写权限
        exit("文件打开失败!");
    }
     
    //将一段字符串添加到压缩文件中,test.txt文件会自动创建
    $zip->addFromString("test.txt", "你好 , 世界");
     
    //将test.php文件添加到压缩文件中
    $zip->addFile("test.php");
   // $zip->renameName($path.$name,$name);  // 这一行为了解决不同级目录的路径错乱
     
    //输出加入的文件数 , 这里应该是 2
    echo "文件数 : ".$zip->numFiles;
     
    //关闭文件
    $zip->close();
    ?>



下面再来看解压文件:
    

<?php
    $zip = new ZipArchive;
     
    if ($zip->open('test.zip') === TRUE) {
        //将test.zip中的文件解压到test文件夹中,文件夹会自动创建
        $zip->extractTo('test/');
        $zip->close();
        echo '解压成功';
    } else {
        echo '解压失败';
    }
    ?>



下面是一个自动打包下载的demo:
    

$oid = $this->spArgs('id');
    $photos = spClass('x_order_photo')->findAll("oid = $oid and type = 2");
    //实例化类
    $zip = new ZipArchive();
    //需要打开的zip文件,文件不存在将会自动创建
    $filename = "./tpl/tmp/{$oid}.zip";
    if ($zip->open($filename, ZIPARCHIVE::CREATE)==TRUE) {
        $i = 1;
        foreach($photos as $p){
            $zip->addFile($p['pic'].'.jpg' , $i.'.jpg');
            $i++;
        }
    }
    $zip->close();
    if(!file_exists($filename)){   
        exit("无法找到文件"); //即使创建,仍有可能失败。。。。   
    }
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename='.basename($filename)); //文件名   
    header("Content-Type: application/zip"); //zip格式的   
    header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件    
    header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小   
    @readfile($filename);
    unlink($filename); // 删除本地缓存文件