欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-07 16:40:37
php多文件夹打包压缩首先安装ZipArchive扩展,具体安装方法百度一下,或者直接看官方文档ZipArchive官方文档直接上代码,简单的调用/* * 文件夹打包 * */ public static function addFileToZip($path,$zip) { $handler = opendir($path); //打开当前文件夹由$path指定。 while (($filename = readdir($hand...

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可以是多个目录,用数组分开

本文地址:https://blog.csdn.net/hzthis/article/details/107488086

相关标签: php ZipArchive