php打包/压缩文件夹为zip

因为有时候需要批量下载图片,所以需要进行压缩打包进行下载

可以用php自带的 ZipArchive 进行过操作
  • 思路:可以先判断文件夹存不存在,存在调用核心方法进行处理

  • 核心方法:

	/**
     * 压缩核心方法
     * addtime 2020年7月17日 18:02:57
     * @param [type] $dir 要压缩的文件路径
     * @param [type] $zip  ZipArchive的对象
     * @return void
     */
    function z_addDir2Zip($dir,$zip)
    {
        $handler = opendir($dir);
        while(( $filename = readdir($handler)) !== false ){
            if ($filename != '.' && $filename != "..") {
                if(is_dir( $dir . '/' . $filename )){// 如果读取的某个对象是文件夹,则递归
                    $this->z_addDir2Zip($dir.'/'.$filename,$zip);
                    // return '继续压缩';
                }else{
                    // 将文件加入zip对象
                    $zip->addFile($dir.'/'.$filename);
                    // return '将对象加入压缩文件夹';
                }
            }
        }
        @closedir($dir);
        return ['code' => 200];
    }

    /**
     * 进行压缩
     * addtime 2020年7月17日 18:02:24
     * @param [type] $dir 要压缩的文件路径
     * @param [type] $zipfile  压缩后的名字
     * @return void
     */
    function z_zipdir( $dir, $zipfile )
    {
        $zip = new \ZipArchive();
        if($zip->open($zipfile, \ZipArchive::OVERWRITE) === TRUE){
            // 这里如果ZipArchive::OVERWRITE调用失败的话(返回9可换成ZipArchive::CREATE)
            // 可以参考官方文档 https://www.php.net/manual/zh/ziparchive.open.php
            // 原因  pecl zip  版本太低  pecl zip在1.7.0版本才加入了ZIPARCHIVE::OVERWRITE模式
            //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
            $res = $this->z_addDir2Zip( $dir, $zip ); 
            $zip->close(); //关闭处理的zip文件
            if ($res['code'] == 200) {
                return ['code' => 200];
            }
        }
    }
  • 进行调用
	 # 进行文件夹压缩
     $res = $this->z_zipdir("qrcodes","qrcodes.zip");
     if ($res['code'] == 200) {
         # 压缩成功
         # code...
     }

觉得有用的小伙伴希望能点个赞支持一下哦

猜你喜欢

转载自blog.csdn.net/qq_15957557/article/details/107415350