压缩某个文件或多个文件
//这里需要注意该目录是否存在,并且有创建的权限
        $zip_path = ROOT_PATH . 'public' . DS . 'uploads/zip';
        if (!file_exists($zip_path)) {
            mkdir($zip_path);
        }
        $zipname = $zip_path . '/exportdevice_' . date('Y-m-d-H-i-s') . '.zip';

        $zip = new \ZipArchive();
        $res = $zip->open($zipname, \ZipArchive::CREATE);
        $img = ROOT_PATH . 'public' . DS . 'uploads/images/aaa.png';
        if ($res === TRUE) {
            $zip->addFile($img, basename($img)); //1、单个文件
            foreach($fileList as $file){ //2、多个文件
                $zip->addFile($file,basename($file));   
            }
        }
        $zip->close();
        //这里是下载zip文件
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: Binary");

        header("Content-Length: " . filesize($zipname));
        header("Content-Disposition: attachment; filename=\"" . basename($zipname) . "\"");

        readfile($zipname);
        exit;
    }
压缩某个文件夹
function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path."/".$filename, $zip);
            }else{ //将文件加入zip对象
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
    addFileToZip('rsa/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
}

标签: none

添加新评论