用户登录
用户注册

分享至

php多个不同目录打包到指定zip压缩文件

  • 作者: 用户63881893
  • 来源: 51数据库
  • 2021-08-17

php多文件夹打包压缩

首先安装ZipArchive扩展,具体安装方法百度一下,或者直接看官方文档

ZipArchive官方文档

直接上代码,简单的调用

/*
     * 文件夹打包
     * */
    public static function addFileToZip($path,$zip)
    {
        $handler = opendir($path); //打开当前文件夹由$path指定。
        while (($filename = readdir($handler)) !== false) {
            if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..',不要对他们进行操作
                if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
                    self::addFileToZip($path . "/" . $filename, $zip);
                } else { //将文件加入zip对象
                    $zip->addFile($path . "/" . $filename);
                }
            }
        }
    }
    /*
     * 文件夹打包,直接调用这个就行了
     * param array $paths 需要打包的目录绝对路径,一维数组传多个目录,比如['/imgs/test1/','/imgs/test2','...']
     * param $filename 保存的绝对路径文件名称。比如/data/tmp/test.zip
     * */
    public static function  dirToZip($paths,$filename)
    {
        $zip = new \ZipArchive();
        try {
            if ($zip->open($filename, $zip::CREATE) == TRUE) {
                foreach ($paths as $path){
                    self::addFileToZip($path, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
                }
                $zip->close(); //关闭处理的zip文件
            }
            if(file_exists($filename)){
                return ['code'=>200,'url'=>$filename,'msg'=>'success'];
            }
            return ['code'=>-200,'msg'=>'打包失败'];
        } catch (\Exception $e) {
            return ['code'=>-200,'msg'=>$e->getMessage()];
        }
    }

外部只需要简单调用dirToZip方法就行了

---- $paths可以是多个目录,用数组分开

软件
前端设计
程序设计
Java相关