转自: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"; | |
} | |
} |
解压后如图