<?php/ php zip压缩文件夹 Author: Dcr163 Date: 2021/09/07 Time: 09:33 /class zip{ public $files = []; //添加到zip中的文件 public $rootDir = 39;'; //当前事情目录 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,末了在浏览器运行文件www.dcr163.cn/zip.php 即可。
记得修正代码里的:$dist 和 $zipFile 为自己的文件夹目录。