转自:https://www.cnblogs.com/makalochen/p/13040563.html
初始环境
1.压缩包格式为:zip
2.压缩文件如下

3.控制器初始代码
| namespace app\zip\controller; | |
| use think\Controller; | |
| class Index extends Controller | |
| { | |
| // | |
| public function index(){ | |
| // 获取表单上传文件 例如上传了001.jpg | |
| $file = request()->file('file'); | |
| // 移动到框架应用根目录/uploads/ 目录下 | |
| $info = $file->validate(['ext'=>'zip'])->move( '../uploads'); | |
| if($info){ | |
| // 成功上传后 获取上传信息 | |
| // 输出 jpg | |
| echo $info->getExtension(); | |
| // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg | |
| echo $info->getSaveName(); | |
| // 输出 42a79759f284b767dfcb2a0197904287.jpg | |
| echo $info->getFilename(); | |
| }else{ | |
| // 上传失败获取错误信息 | |
| echo $file->getError(); | |
| } | |
| return "1111"; | |
| } | |
| } | 
4.路由
直接就是/uploadZip
5.使用postman模拟前端提交结果如下

好了,现在基本的文件上传已经完成了,现在做zip解压
安装zip扩展
window zip扩展下载地址
php 扩展总站:
PHP 5.2/5.3的Windows扩展索引站点:
在这里你可以找到诸如php_oci8.dll, php_memcache.dll, php_mongo.dll, php_apc.dll等常用的Windows扩展dll文件,也能找到一些相对冷门但是也很实用的php扩展,如php_oauth.dll, php_solr.dll等扩展
http://downloads.php.net/pierre/
PHP 5.3/5.4/5.5的Windows扩展索引站点:
那么你就需要到下面这个站点来找扩展了, 该站点能下载到支持php5.4/5.5的pecl扩展,
http://windows.php.net/downloads/pecl/releases/
所有版本的zip包
https://pecl.php.net/package/zip
下载对应的zip动态链接库
例如:
php 7.0 (Thread Safety:如果是enable,则是Thread Safe(线程安全)版本;否则,就是None Thread Safe(非线程安全)版本)。
图中就是线程安全版本

则下载这个版本的动态链接库,如果是32位的就下载32位的
链接:https://pecl.php.net/package/zip/1.13.5/windows

配置开启zip扩展
将解压出来的php_zip.dll文件放在php的扩展目录下

找到php.ini配置文件加入extension=php_zip.dll,重启apache

访问phpinfo()查看

如上说明配置成功
解压文件
在这里提供两个封装的方法,我将这两个方法放在了common文件
这两个方法转自:https://www.cnblogs.com/guliang/p/11742297.html
| /** | |
| * 压缩文件 | |
| * @param array $files 待压缩文件 array('d:/test/1.txt','d:/test/2.jpg');【文件地址为绝对路径】 | |
| * @param string $filePath 输出文件路径 【绝对文件地址】 如 d:/test/new.zip | |
| * @return string|bool | |
| */ | |
| function zip($files, $filePath) | |
| { | |
| //检查参数 | |
| if (empty($files) || empty($filePath)) { | |
| return false; | |
| } | |
| //压缩文件 | |
| $zip = new ZipArchive(); | |
| $zip->open($filePath, ZipArchive::CREATE); | |
| foreach ($files as $key => $file) { | |
| //检查文件是否存在 | |
| if (!file_exists($file)) { | |
| return false; | |
| } | |
| $zip->addFile($file, basename($file)); | |
| } | |
| $zip->close(); | |
| return true; | |
| } | |
| /** | |
| * zip解压方法 | |
| * @param string $filePath 压缩包所在地址 【绝对文件地址】d:/test/123.zip | |
| * @param string $path 解压路径 【绝对文件目录路径】d:/test | |
| * @return bool | |
| */ | |
| function unzip($filePath, $path) | |
| { | |
| if (empty($path) || empty($filePath)) { | |
| return false; | |
| } | |
| $zip = new ZipArchive(); | |
| if ($zip->open($filePath) === true) { | |
| $zip->extractTo($path); | |
| $zip->close(); | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | 
修改后的控制器代码
| namespace app\zip\controller; | |
| use think\Controller; | |
| class Index extends Controller | |
| { | |
| // | |
| public function index(){ | |
| // 获取表单上传文件 例如上传了001.jpg | |
| $file = request()->file('file'); | |
| // 移动到框架应用根目录/uploads/ 目录下 | |
| $info = $file->validate(['ext'=>'zip'])->move( '../uploads'); | |
| if($info){ | |
| //该函数为自定义函数放在了common文件中 | |
| unzip('../uploads/'.$info->getSaveName(), '../uploads/'); | |
| }else{ | |
| // 上传失败获取错误信息 | |
| echo $file->getError(); | |
| } | |
| return "1111"; | |
| } | |
| } | 
解压后如图
