php生成压缩包

/**
     * description:主方法:生成压缩包
     * @author: MY
     * @param $dir_path  想要压缩的目录:如 './demo/'
     * @param $zipName   压缩后的文件名:如 './folder/demo.zip'
     * @return string
     */
    public function zip($dir_path, $zipName)
    {
        $relationArr = array(
            $dir_path => array(
                'originName' => $dir_path,
                'is_dir' => true,
                'children' => array()
            )
        );
        $this->modifiyFileName($dir_path, $relationArr[$dir_path]['children']);
        $key = array_keys($relationArr);
        $val = array_values($relationArr);
        $zip = new \ZipArchive;
        //ZIPARCHIVE::CREATE没有即是创建
        $zip->open($zipName,\ZipArchive::CREATE);
        $this->zipDir($key[0], '', $zip, $val[0]['children']);
        $zip->close();
        return true;
    }

    /**
     * [zipDir 给zip文件添加目录及文件]
     * @param  [type] $real_path   [根目录]
     * @param  [type] $zip_path    [压缩目录]
     * @param  [type] &$zip        [引入zip资源]
     * @param  [type] $relationArr [参数变量]
     * @return [type]              [description]
     */
    public function zipDir($real_path, $zip_path, &$zip, $relationArr)
    {
        $sub_zip_path = empty($zip_path) ? '' : $zip_path . '/';
        if (is_dir($real_path)) {
            foreach ($relationArr as $k => $v) {
                if ($v['is_dir']) {  //是文件夹
                    $zip->addEmptyDir($sub_zip_path . $v['originName']);
                    $this->zipDir($real_path . '/' . $k, $sub_zip_path . $v['originName'], $zip, $v['children']);
                } else { //不是文件夹
                    $zip->addFile($real_path . '/' . $k, $sub_zip_path . $k);
                }
            }
        }
    }

    /**
     * [modifiyFileName 遍历目录下所有文件夹及文件]
     * @param  [type] $path         [需要压缩的目录路径]
     * @param  [type] &$relationArr [引入参数变量]
     * @return [type]               [无]
     */
    public function modifiyFileName($path, &$relationArr)
    {
        if (!is_dir($path) || !is_array($relationArr)) {
            return false;
        }
        if ($dh = opendir($path)) {
            $count = 0;
            while (($file = readdir($dh)) !== false) {
                if(in_array($file,array('.', '..', null))) continue; //无效文件,重来
                if (is_dir($path . '/' . $file)) {
                    $relationArr[$file] = array(
//                        'originName' => iconv('GBK', 'UTF-8', $file),
                        'originName' => mb_convert_encoding($file,"GBK","UTF-8"),
                        'is_dir' => true,
                        'children' => array()
                    );
                    $this->modifiyFileName($path . '/' . $file, $relationArr[$file]['children']);
                }else{
                    $relationArr[$file] = array(
//                        'originName' => iconv('GBK', 'UTF-8', $file),
                        'originName' => mb_convert_encoding($file,"GBK","UTF-8"),
                        'is_dir' => false,
                        'children' => array()
                    );
                }
            }
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值