PHP文件夹打包成zip压缩包

2022-10-11 20:58:03 128 0
魁首哥

PHP将文件夹打包成zip压缩包

有些虚拟空间没有控制面板在线打包的功能,这里使用PHP打包某个目录为zip,直接在浏览器执行即可打包,直接上代码

 formatMicotime(microtime());
        $this->rootDir = str_replace('\\','/',getcwd());
        $this->openExclude = $openExclude;
        $zipDir = $this->rootDir .'/'.$dist;
        $this->listDirs($zipDir);
        if( empty($this->files) ) throw new ErrorException('打包失败,需要打包的文件为空');
        //实例化zip类
        $zip = new ZipArchive();
        //打开压缩包 新建或写
        $zipRes = $zip->open($zipFile,ZipArchive::CREATE | ZipArchive::OVERWRITE );
        if( $zipRes !== true ) throw new ErrorException('zip文件打开失败,错误代码:'.$this->zipErrorMsg($zipRes));
        $addRes = [];//添加压缩文件状态
        foreach ($this->files as $v){
            //把文件添加到压缩包里
            $res = $zip->addFile($v,str_replace($this->rootDir,'',$v));
            $addRes[]=$res;
        }
        //关闭资源
        $zip->close();
        $etime = $this->formatMicotime(microtime());
        if( count($addRes) ) {
            echo '打包成功,成功打包:'.count($addRes).' 个文件;运行时间:'.round($etime-$stime,2).' S';
        } else {
            echo '打包失败';
        }
    }
    /**
     * 遍历所有文件
     * @param $dir
     */
    public function listDirs($dir){
        $dirRes = opendir($dir);
        while( false !== ($file = readdir($dirRes)) ){
            if( in_array($file,['.','..'])) continue;
            $realFile = $dir.$file;
            //如果是文件夹,则递归 / 这个不能少
            if( is_dir($realFile) ){
                $this->listDirs($realFile.'/');
            } else {
                if( $this->openExclude ){
                    //排除压缩文件不添加
                    $excludeArr = ['zip','tar','gz','ara','7z'];
                    //分隔文件,用于查询文件后缀
                    $tmpArr = (explode('.',$realFile));
                    if( count($tmpArr) >1 ){
                        //获取文件的后缀
                        $ext = strtolower($tmpArr[count($tmpArr)-1]);
                        //排除指定后缀的文件
                        if( in_array($ext,$excludeArr) ) continue;
                    }
                }
                //添加到文件列表中
                $this->files[] = $realFile;
            }
        }
    }
    /**
     * 错误提示
     * @param $code
     * @return mixed|string
     */
    protected function zipErrorMsg($code){
        $errorCode = array(
            4=>'Seek error',
            5=>' Read error',
            9=>'No such file.',
            10=>'File already exists.',
            11=>'Can\'t open file.',
            14=>'Malloc failure.',
            18=>'Invalid argument.',
            19=>'Not a zip archive.',
            21=>'Zip archive inconsistent',
        );
        return array_key_exists($code,$errorCode) ? $errorCode[$code] : '未知错误';
    }

    /**
     * 格式化 时间戳和微秒数
     * @param $microtime
     * @return mixed
     */
    protected function formatMicotime($microtime){
        list($usec,$sec) = explode(' ',$microtime);
        return  $sec+$usec;
    }
}

try{
    //需要打包zip的目录
    $dist = './';
    //打包后的zip文件名称
    $zipFile = 'web.zip';
    //实例化类
    $zip = new zip();
    //开始打包zip
    $zip->index($dist ,$zipFile);
}catch (Exception $e){
     exit($e->getMessage());
}  

使用方法

把代码复制,保存到一个PHP文件里,例如放置到根目录下: /zip.php ,最后在浏览器运行文件 www.dcr163.cn/zip.php 即可。

PHP文件夹打包成zip压缩包

记得修改代码里的: $dist $zipFile 为自己的文件夹目录。

收藏
分享
海报
0 条评论
128
上一篇:2019九寨沟开放时间和开放区域(2019九寨沟门票多少钱) 下一篇:微信朋友圈传视频怎么保持原画质(微信朋友圈怎么传原画质视频)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码