最近项目有需求需要定期svn更新项目,并打包成下载包供下载,参考了网上的一些相关代码后写了如下一个用来进行zip压缩的小组件
关于php进行svn操作的组件:http://blog.csdn.net/meeeen7/article/details/78297063
关于php进行download下载的组件:http://blog.csdn.net/meeeen7/article/details/78297528
class zipUtil {
public static function zip($dir,$saveDir,$file) {
$zip = new ZipArchive();
if($zip->open($saveDir.$file.'.zip', ZipArchive::OVERWRITE) === TRUE){
self::addFileToZip($dir.'/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
}
}
private function addFileToZip($dir,$zip) {
$handler=opendir($dir); //打开当前文件夹由$path指定。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".." && $filename != ".svn"){//文件夹文件名字为'.'和'..',不要对他们进行操作
if(is_dir($dir."/".$filename) && count(scandir($dir."/".$filename)) > 3){// 如果读取的某个对象是文件夹,则递归
self::addFileToZip($dir."/".$filename, $zip);
}else{ //将文件加入zip对象
$zip->addFile($dir."/".$filename);
}
}
}
@closedir($dir);
}
}
一开始的实现思路本来是想直接用php的exec直接运行shell zip命令进行打包的,后来发现php有ziparchive这样一个扩展,研究了一下后决定使用ziparchive来进行压缩,使用时直接调用zip函数即可,会自动递归调用addfiletozip函数,将文件和文件夹放到zip包中,其中$dir,$saveDir,$file分别代表了要压缩的文件的路径,目标存放路径和打包后的zip包名