php:实现压缩文件上传、解压、文件更名、压缩包删除功能

news2024/11/26 4:21:45

效果图

1.上传文件

2.压缩包文件

3.itemno1文件

4.上传到系统路径\ItemNo

更名后的itemno1文件

代码

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>" method="post" enctype="multipart/form-data">
  <input type="hidden" name="FormID" value="<?php echo $_SESSION['FormID']; ?>">
  <input type="file" name="folderArchive[]" accept=".zip" multiple>
  <input type="submit" value="上传" name="update">
</form>

<?php
$target_dir = "ItemNo/";
$now = date('YmdHis'); // 获取当前日期时间
$itemNo = pathinfo($target_path, PATHINFO_DIRNAME); // 获取料号,假设料号是文件夹名
$counter = 1; // 初始化序号计数器
if (isset($_POST['update'])) {
  if (isset($_FILES['folderArchive']) && !empty($_FILES['folderArchive']['name'])) {
    $zip_files = $_FILES['folderArchive'];
    foreach ($zip_files['name'] as $key => $file_name) {
      if ($zip_files['error'][$key] === UPLOAD_ERR_OK) {
        $temp_file = $zip_files['tmp_name'][$key];
        $target_path = $target_dir . basename($file_name);
        // 将临时文件移动到服务器上的适当位置(如果需要)
        move_uploaded_file($temp_file, $target_path);
        // 创建一个新的 ZipArchive 对象
        $zip = new ZipArchive;
        // 打开zip文件
        if ($zip->open($target_path) === TRUE) {
          // 解压缩到指定的目录
          $zip->extractTo($target_dir);
          $zip->close();
          prnMsg(sprintf(_('文件 "%s" 已成功上传成功.'), $file_name), 'success');
        } else {
          prnMsg(sprintf(_('文件 "%s" 上传成功但无法解压.'), $file_name), 'error');
        }
      } else {
        prnMsg(sprintf(_('文件 "%s" 上传失败.'), $file_name), 'error');
      }
      //文件命名
      if ($zip->open($target_path) === TRUE) {
        $zip->extractTo($target_dir);
        $zip->close();
        // 获取解压后每个料号(子文件夹)的路径
        $subDirs = glob($target_dir . '*', GLOB_ONLYDIR);
        foreach ($subDirs as $subDir) {
          // 获取料号名称
          $itemNo = basename($subDir);
          // 获取子文件夹中的所有文件
          $filesInSubDir = glob($subDir . '/*');
          $counter = 1; // 每个料号内部初始化序号计数器
          foreach ($filesInSubDir as $file) {
            // 跳过目录
            if (is_dir($file)) continue;
            // 修改日期格式为年月日
            $dateForFilename = date('Ymd', strtotime($now));
            // 构建新的文件名
            $newFileName = $itemNo . '_' . $dateForFilename . '_' . sprintf('%04d', $counter++) . '.' . pathinfo($file, PATHINFO_EXTENSION);
            // 重命名文件
            rename($file, $subDir . '/' . $newFileName);
            // prnMsg(sprintf(_('文件 "%s" 在料号 "%s" 下已成功上传并重命名为 "%s".'), basename($file), $itemNo, $newFileName), 'success');
          }
        }
      } else {
        prnMsg(_('命名出错'), 'error');
      }
    }
    // 解压缩和重命名完成后删除原始压缩文件
    unlink($target_path);
  } else {
    prnMsg(_('附件上传失败!'), 'error');
  }
  unset($_POST['update']);
}
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python+Selenium+Unittest 之Unittest3(TestSuite()和TextTestRunner())

目录 1&#xff1a;addTest() 2、addTests() 3&#xff1a;discover() 上一篇说了Unittest的一个基本的执行顺序&#xff0c;那如果我们想要调整用例的执行先后顺序的话&#xff0c;可以用TestSuite()和TextTestRunner()了&#xff0c;可以这么理解&#xff0c;比如一个班级…

TRON x HTX DAO 2024 香港之夜:共建香港元宇宙金融自由港

4月9日&#xff0c;由波场TRON主办&#xff0c;HTX DAO协办的“TRON x HTX DAO 2024 香港之夜”主题活动在香港盛大举行。多位参与HTX DAO生态建设的项目方代表、委员会成员、知名KOL等出席并就HTX DAO发展及加密业态进行演讲。 活动现场&#xff0c;波场TRON创始人孙宇晨通过视…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…

使用Docker部署开源项目FreeGPT35来免费调用ChatGPT3.5 API

Vercel部署FreeGPT35有严重限制&#xff0c;玩玩就好&#xff0c;真用还是得docker。 限制原因: Vercel的流式响应并不是一开始写流&#xff0c;客户端就能立刻收到响应流&#xff0c;而是先写到一个缓冲区&#xff0c;当流关闭才一股脑的流式响应回来(不是实时流) 因此导致: …

代码随想录Day31:贪心算法Part1

贪心算法的理论基础 主要的思路就是通过想局部最优解然后看能不能推导出全局最优&#xff0c;但是贪心算法没有统一的套路&#xff0c;每一个问题的贪心思路都可以非常不一样 Leetcode 455. 分发饼干 讲解前&#xff1a; 这时第一道贪心算法的题目&#xff0c;所以很简单&am…

Open CASCADE学习|放样建模

在CAD软件中&#xff0c;Loft&#xff08;放样&#xff09;功能则是用于创建三维实体或曲面的重要工具。通过选取两个或多个横截面&#xff0c;并沿这些横截面进行放样&#xff0c;可以生成复杂的三维模型。在CAD放样功能的操作中&#xff0c;用户可以选择不同的选项来定制放样…

【新手指南】创建简单搜索引擎优化报告

搜索引擎优化&#xff08;SEO&#xff09;是一项长期投资&#xff0c;需要持续监控&#xff0c;以确保产生您所期望的结果。这就是生成搜索引擎优化报告的重要性所在–这份报告会告诉你哪些有效&#xff0c;哪些无效&#xff0c;哪些需要改进。 如果你从未创建过搜索引擎优化报…

C语言 文件函数

目录 1. 文件的打开和关闭 2. 文件的顺序读写 2.1 顺序读写函数介绍 2.2读文件&#xff08;读文件只能读一次&#xff09; 2.3写文件 3. 文件的随机读写 3.1 fseek 3.2 ftell 3.3 rewind 4.文件读取结束的判定 4.1 被错误使误的 feof 我对读写的理解&#xff1a;(从…

SpringBoot 集成H2数据库,启动执行sql, 中文乱码

目录 H2数据库介绍 SpringBoot版本&#xff1a;SpringBoot 2.1.12.RELEASE 快速集成H2&#xff0c;maven依赖 快速集成H2&#xff0c;数据源及关键参数配置 spring.datasource.schema参数&#xff08;建表SQL脚本&#xff09; spring.datasource.data参数&#xff08;更新、…

【鹤城杯 2021】 CRYPTO刷题

easy_crypto 附件easy_crypto.txt&#xff0c;内容是社会核心主义观 公正公正公正诚信文明公正民主公正法治法治诚信民主自由敬业公正友善公正平等平等法治民主平等平等和谐敬业自由诚信平等和谐平等公正法治法治平等平等爱国和谐公正平等敬业公正敬业自由敬业平等自由法治和…

联想电脑VMware虚拟机VT开启虚拟化

以联想电脑为例。 关机重启&#xff0c; 有的电脑是按F2&#xff0c; 有的是按fnF2 进入BIOS&#xff0c;左右键&#xff0c;选择Configuration&#xff0c; 再上下键选择 Intel Virtual Technology 按回车键&#xff0c;再按上下键选择 Enable &#xff0c;回车确认。 按fn…

【VScode】同时编辑多处

【VScode】同时编辑多处 1. 多光标自定义批量编辑2. 选择多个&#xff0c;同时操作(批量选中局部匹配项)3. 取消选择4. 在不移动光标的情况下滚动屏幕5. 批量选中全局匹配项6.重点6.1 通过上下键选择多行6.2 同时选中所有行的末尾6.3 选中多列另一种方式6.4 通过正则的方式配置…

dockerhub右键快速搜索脚本

Chrome 浏览器扩展的后台脚本&#xff0c;用于创建右键菜单项&#xff0c;并根据用户的操作在新的标签页中打开 Docker Hub 网站或者进行搜索。 // 创建右键菜单项&#xff0c;用于打开 Docker Hub 网站 chrome.contextMenus.create({id: search-home, // 菜单项的唯一标识符t…

移除元素Java实现

题意 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 额外空间 并 原地 修改数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元…

Netty实现udp服务器

1、TCP与UDP通信协议 网络传输层协议有两种&#xff0c;一种是TCP&#xff0c;另外一种是UDP。 TCP是一种面向连接的协议&#xff0c;提供可靠的数据传输。TCP通过三次握手建立连接&#xff0c;并通过确认和重传机制&#xff0c;保证数据的完整性和可靠性。TCP适用于对数据准…

红豆Cat 1开源|项目二: 从0-1设计一款MQTT版本DTU(支持GNSS)产品的软硬件全过程

MQTT版DTU&#xff08;GNSS&#xff09;项目概述 DTU 通常指的是数据传输单元&#xff0c;它是一种用于将现场设备的数据通过无线或有线方式传输到远程控制中心的设备。DTU 可以实现设备与控制中心之间的数据通信&#xff0c;以便实时监测和控制设备的运行状态。 产品定义描述…

SpringBoot内容协商快速入门Demo

1.什么内容协商 简单说就是服务提供方根据客户端所支持的格式来返回对应的报文&#xff0c;在 Spring 中&#xff0c;REST API 基本上都是以 json 格式进行返回&#xff0c;而如果需要一个接口即支持 json&#xff0c;又支持其他格式&#xff0c;开发和维护多套代码显然是不合理…

面对DDOS攻击,有哪些解决办法

随着互联网带宽的持续增长以及DDOS黑客技术的发展&#xff0c;DDOS拒绝服务攻击的实施变得愈发容易。商业竞争、打击报复、网络敲诈等多种因素&#xff0c;各行各业的用户都曾受到DDOS攻击的威胁。 一旦遭受到DDOS攻击&#xff0c;随之而来的就是业务宕机&#xff0c;用户无法…

C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组

本文介绍基于C语言GDAL库&#xff0c;批量读取大量栅格遥感影像文件&#xff0c;并生成各像元数值的时间序列数组的方法。 首先&#xff0c;我们来明确一下本文所需实现的需求。现在有一个文件夹&#xff0c;其中包含了很多不同格式的文件&#xff0c;如下图所示。 其中&#x…