tp5.1 上传zip压缩包并解压

初始环境

1.压缩包格式为:zip

2.压缩文件如下

image-20200603214611534

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

image-20200603215002123

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 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";
    }
}

解压后如图

image-20200603223955786

原文地址:https://www.cnblogs.com/makalochen/p/13040563.html