thinkphp5.1 上传zip压缩包并解压 转

转自:https://www.cnblogs.com/makalochen/p/13040563.html

初始环境

1.压缩包格式为:zip

2.压缩文件如下

image-20200603214611534

3.控制器初始代码

<?php
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模拟前端提交结果如下

image-20200603215139252

好了,现在基本的文件上传已经完成了,现在做zip解压

安装zip扩展

window zip扩展下载地址

php 扩展总站:

https://pecl.php.net/

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(非线程安全)版本)。

图中就是线程安全版本

image-20200603221255434

则下载这个版本的动态链接库,如果是32位的就下载32位的

链接:https://pecl.php.net/package/zip/1.13.5/windows

image-20200603222834624

配置开启zip扩展

将解压出来的php_zip.dll文件放在php的扩展目录下

image-20200603221930274

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

image-20200603222319674

访问phpinfo()查看

image-20200603222932794

如上说明配置成功

解压文件

在这里提供两个封装的方法,我将这两个方法放在了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 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";
}
}

解压后如图

image-20200603223955786

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注