• 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

  • 相关阅读:
    SQL 多列合并一列
    jQuery Ajax post多个值传参
    jquery获取select选中的值
    js 事件对象
    有关cookie
    事件冒泡和事件捕获
    js事件监听
    阻止浏览器的默认行为
    鼠标拖拽效果
    自定义右键菜单
  • 原文地址:https://www.cnblogs.com/makalochen/p/13040563.html
Copyright © 2020-2023  润新知