初始环境
1.压缩包格式为:zip
2.压缩文件如下
3.控制器初始代码
<?php
namespace appzipcontroller;
use thinkController;
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;
}
}
修改后的控制器代码
<?php
namespace appzipcontroller;
use thinkController;
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";
}
}
解压后如图