有些虚拟空间没有控制面板在线打包的功能,这里使用PHP打包某个目录为zip,直接在浏览器执行即可打包,直接上代码,今天小编就来聊一聊关于php上传压缩包并解压?接下来我们就一起去研究一下吧!

php上传压缩包并解压(PHP文件夹打包成zip压缩包)

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,最后在浏览器运行文件www.dcr163.cn/zip.php 即可。

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

,