龙空技术网

PHP文件夹打包成zip压缩包

神马冬锡 157

前言:

此刻咱们对“php复制文件夹到另外一个地方”大概比较关心,各位老铁们都需要知道一些“php复制文件夹到另外一个地方”的相关文章。那么小编也在网摘上汇集了一些关于“php复制文件夹到另外一个地方””的相关文章,希望看官们能喜欢,你们快快来了解一下吧!

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

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

<?php/** * php zip压缩文件夹 * Author: Dcr163 * Date: 2021/09/07 * Time: 09:33 */class zip{    public $files = []; //添加到zip中的文件    public $rootDir = ''; //当前工作目录    public $openExclude = ''; //是否开启过滤指定后缀    /**     * 文件夹打包成zip     * @param $dist  需要打包的目录     * @param $zipFile 打包的文件名     * @throws ErrorException     */    public function index($dist,$zipFile,$openExclude=false){        if( !class_exists('ZipArchive') ) throw new ErrorException('ZipArchive 扩展未启用');        $stime = $this->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,最后在浏览器运行文件 即可。

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

标签: #php复制文件夹到另外一个地方 #php打包 #php压缩文件浏览器 #java压缩zip包 #phpziparchive压缩