$filename = "test.zip";
$zip = new ZipArchive();
$zip->open($filename,ZipArchive::CREATE); //打开压缩包
$zip->addFile($path,basename($path)); //向压缩包中添加文件
$zip->close(); //关闭压缩包
上述代码将c:/wamp/www/log.txt文件压缩生成了test.zip,并保存在当前目录。
# 压缩多个文件
压缩多个文件,其实就是addFile执行多次,可以通过数组的遍历来实现。
$fileList = array(
"c:/wamp/www/log.txt",
"c:/wamp/www/weixin.class.php"
$filename = "test.zip";
$zip = new ZipArchive();
$zip->open($filename,ZipArchive::CREATE); //打开压缩包
foreach($fileList as $file){
$zip->addFile($file,basename($file)); //向压缩包中添加文件
$zip->close(); //关闭压缩包
# 压缩一个目录
function addFileToZip($path,$zip){
$handler=opendir($path); //打开当前文件夹由$path指定。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
addFileToZip($path."/".$filename, $zip);
}else{ //将文件加入zip对象
$zip->addFile($path."/".$filename);
@closedir($path);
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
addFileToZip('rsa/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
# 压缩并下载zip包
我的时候,我们需要打包之后,提供下载,然后删除压缩包。
可以分为以下几步:
判断给出的路径,是文件夹,还是文件。文件夹还需要遍历添加文件。
设置相关文件头,并使用readfile函数提供下载。
使用unlink函数删除压缩包
function addFileToZip($path,$zip){
$handler=opendir($path); //打开当前文件夹由$path指定。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
addFileToZip($path."/".$filename, $zip);
}else{ //将文件加入zip对象
$zip->addFile($path."/".$filename);
@closedir($path);
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
$path = 'rsa/';
if(is_dir($path)){ //给出文件夹,打包文件夹
addFileToZip($path, $zip);
}else if(is_array($path)){ //以数组形式给出文件路径
foreach($path as $file){
$zip->addFile($file);
}else{ //只给出一个文件
$zip->addFile($path);
$zip->close(); //关闭处理的zip文件
以上就是如何使用php生成zip压缩包的详细内容
php开发
字符数组对象
php换行替换,PHP替换回车换行符的三种方法
PHP 数组转字符串,与字符串转数组
php将img中的宽高删除,PHP删除HTML中宽高样式的详解
php去除换行(回车换行)的三种方法
php 过滤word 样式
php如何设置随机数
2个比较经典的PHP加密解密函数分享
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法非常简单
PHP指定时间戳/日期加一天,一年,一周,一月
使用php 获取时间今天明天昨天时间戳的详解
php获得当月的节假日函数(包含周末,年度节假日)
PHP获取本月起始和截止时间戳
php 获取每月开始结束时间,php 获取指定月份的开始结束时间戳
PHP获取今天,昨天,本月,上个月,本年 起始时间戳
php、mysql查询当天,本周,本月的用法
php获取两个时间戳之间相隔多少天多少小时多少分多少秒
毫秒级时间戳和日期格式转换
php-倒计时
请求提交上传
php+put+post,Curl和PHP-如何通过PUT,POST,GET通过curl传递json
PHP put提交和获取数据
PHP curl put方式上传文件
数据导入导出
PHP快速导入大量数据到数据库的方法
PHP快速导出百万级数据到CSV或者EXCEL文件
PHP解析大型Excel表格的库:box/spout
PHP导入(百万级)Excel表格数据
PHP如何切割excel大文件
使用 PHP_XLSXWriter 代替 PHPExcel 10W+ 数据秒级导出
安装php扩展XLSXWriter
解决php导入excel表格时获取日期变成浮点数的方法
xml处理
PHP XML和数组互相转换
php解析xml字符串
php 生成vcf通讯录
文件操作相关
php获取文件后缀的9种方法
PHP判断远程文件是否存在
php 读取文件并以文件方式下载
php 把数字转化为大写中文
PHP 获取当前访问的URL
php生成zip压缩包
PHPMailer
整理PHPMailer 发送邮件 邮件内容为html 可以添加多个附件等
OA管理员密码忘了怎么办,这里教你分分钟搞定…
php解决多站点跨域
php设置samesite cookie,有效防止CSRF
Chrome 配置samesite=none方式
Cookie 的 SameSite 属性
php pdf首页截图,PHP_PHP中使用Imagick读取pdf并生成png缩略图实例,pdf生成png首页缩略图
PHP -- 七牛云 在线视频 获取某一帧作为封面图
PHP图片压缩方法
如何解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
php远程下载文章中图片并保存源文件名不变
详解PHP如何下载采集图片到本地(附代码实例)
php如何将webp格式图片转为jpeg
php 软件版本号比较
使用PHP通过SMTP发送电邮
php.ini配置调优
PHP 几种常见超时的设置方法
php 获取代码执行时间和消耗的内存
PHP如何判断某项扩展是否开启
centos7.x下php 导出扩展 XLSXWriter 安装
php生成mysql数据库字典
PHP 实现 word/excel/ppt 转换为 PDF
composer的使用
showdoc sqlite3 找回管理员密码
php怎么将数组转为xml
Yii2 如何获取Header参数?
swoole
Linux下搭建swoole服务的基本步骤
相关学习资料
带你学习swoole_process详解
按照官方文档 在win10下安装 docker for windows easyswoole镜像 挂载目录
php常用框架
Hyperf
常用算法PHP版
thinkphp6
TP6 事件绑定、监听、订阅
Thinkphp 模板中输出HTML的变量
Thinkphp6(操作SQL数据库)
thinkphp6 mysql查询语句对于为null和为空字符串给出特定值处理
Thinkphp 6 - 连接配置多个数据库并实现自由切换(详细过程及实例demo)
TP框架中的Db::name 和 dB::table 以及 db('') 的区别
thinkphp6.0模型篇之模型的软删除
thinkphp6自定义日志驱动,增加显示全部请求信息
微擎数据库字段字典
Flutter实现微信支付和iOS IAP支付
Flutter上线项目实战——苹果内购
PHP接入苹果支付
php如何获取当前脚本所有加载的文件
php跟踪所有调用方法,日志方法
解析phpstorm + xdebug 远程断点调试
PHP XDEBUG调试 PHPSTORM配置
PHP 出现 502 解决方案
php 语法解析错误 syntax error unexpected namespace T_NAMESPACE
Composer 安装与使用
数据库相关
php pdo怎么设置utf8
php 如何根据最新聊天对用户进行排序
php lic&fpm
让php程序在linux后台执行
PHPcli模式和fpm模式优缺点在哪里?
php运行模式之cli模式
php批量获取所有公众号粉丝openid
php 判断点在多边形内,php百度地图api判断地址是否在多边形区域内
PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询
MySQL 根据经纬度查找排序
PHP+MySQL获取坐标范围内的数据
【百度地图】删除指定覆盖物
百度地图多点+画连接线+数字标注
laravel5.8
laravel5.8(四)引入自定义常量文件及公共函数文件
Lumen 查询执行SQL
使你的 Laravel 项目模块化
Laravel 多条件 AND , OR条件组合查询
Laravel 查询 多个or或者and条件
申请其他相关
小程序地理位置接口申请
PHP高并发
php 高并发下 秒杀处理思路
记录 PHP高并发 商品秒杀 问题的 Redis解决方案
thinkphp3.2
thinkphp3.2 数据库 AND OR连缀使用
mysql
mysql联合索引(复合索引)详解
MYSQL 清空表和截断表
MySQL快速生成大量测试数据(100万、1000万、1亿)
提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
MySQL常用命令
MySQL(三)|《千万级大数据查询优化》第一篇:创建高性能的索引
MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化
MySQL(二)|深入理解MySQL的四种隔离级别及加锁实现原理
MySQL(四)|《千万级大数据查询优化》第一篇:创建高性能的索引(补充)
MySQL(五)|《千万级大数据查询优化》第二篇:查询性能优化(1)
MySQL(六)|《千万级大数据查询优化》第二篇:查询性能优化(2)
MySQL(七)|MySQL分库分表的那点事
Mysql索引优化 Mysql通过索引提升查询效率(第二棒)
MySQL查询的性能优化(查询缓存、排序跟索引)
【总结】MySQL数据库
MySQL存储引擎、事务日志并发访问以及隔离级别
数据库 SQL查询重复记录 方法
替换数据库中某个字段中的部分字符
mysql开启bin log 并查看bin log日志(linux)
千万级别数据的mysql数据表优化
MYSQL百万级数据,如何优化
MySQL备份和恢复
MySQL间隙锁死锁问题
MySQL中sql_mode参数
mysql数据库异常
this is incompatible with sql_mode=only_full_group_by
mysql安全
MySQL数据库被比特币勒索及安全调整
MongoDB
sql查询
MYSQL按时间段分组查询当天,每小时,15分钟数据分组
基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇
数据库安全
服务器被黑,MySQL 数据库遭比特币勒索!该如何恢复?
数千台MySQL数据库遭黑客比特币勒索,该怎么破?
Elasticsearch
安装与配置
ElasticSearch关闭重启命令
设置ES默认分词器IK analyzer
elasticsearch 模糊查询不分词,实现 mysql like
elasticSearch多条件高级检索语句,包含多个must、must_not、should嵌套示例,并考虑nested对象的特殊检索
elasticSearch按字段普通检索,结果高亮
Elasticsearch 如何实现查询/聚合不区分大小写?
索引更新&刷新
refresh与批量操作的效率
Elasticsearch 删除type
ElasticSearch最全分词器比较及使用方法
解决ES因内存不足而无法查询的错误,Data too large, data for [<http_request>]
linux
CentOS7.5 通过wget下载文件到指定目录
【CentOS】vi命令
centos7查看硬盘使用情况
CentOS7 查看目录大小
Centos 7下查看当前目录大小及文件个数
普通用户sudo\su 到root免密码
普通用户切换到root用户下的免密配置方法
linux 获取进程启动参数,linux查看进程启动及运行时间
Linux 查看进程
linux删除文件后不释放磁盘的问题
Linux查找大文件命令
linux 如何关闭正在执行的php脚本
linux三剑客(grep、sed、awk)基本使用
centos 卸载软件
问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...
php相关
centos 安装phpize
Centos7.2下phpize安装php扩展
资深Linux运维工程师常用的10款软件/工具介绍
一款良心的终端连接工具
六款Linux常用远程连接工具介绍,看看哪一款最适合你
Finalshell
Linux Finalshell连接centos7和文件无显示问题
WSL2:我在原生的Win10玩转Linux系统
MobaXterm
linux服务器上定时自动备份数据库,并保留最新5天的数据
Centos系统开启及关闭端口
CentOS7开放和关闭端口命令
Linux中查看所有正在运行的进程
防火墙firewall-cmd命令详解
centos 7.8阿里云服务器挂载 数据盘
Linux Finalshell连接centos7和文件无显示问题
Centos7系统端口被占用问题的解决方法
如何在Vim/Vi中复制,剪切和粘贴
[Linux kill进程] kill 进程pid的使用详解
Linux的几种备份、恢复系统方式
Linux系统全盘备份方法
相关软件安装
linux下 lua安装
python
升级pip之后出现sys.stderr.write(f“ERROR: {exc}“)
centos源码部署lua-5.3
deepin
deepin20.6设置默认的root密码
宝塔定时任务按秒执行
CentOS 7 定时任务 crontab 入门
centos7定时任务crontab
Linux下定时任务的查看及取消
Linux(CentOS7)定时执行任务Crond详细说明
Centos7开启防火墙及特定端口
layui
layui多文件上传
layer.msg()弹框,弹框后继续运行
radio取值
layui-数据表格排序
Layui select选择框添加搜索选项功能
保持原来样式
layui表格单元如何自动换行
layui-laydate时间日历控件使用方法详解
layui定时刷新数据表格
layer 延时设置
layer.open 回调函数
【Layui内置方法】layer.msg延时关闭msg对话框(代码案例)
layui多图上传图片顺序错乱及重复上传解决
layer.confirm关闭弹窗
Vue跨域解决方法
vue 4.xx.xx版本降级至2.9.6
vue-cli 2.x升级到3.x版本, 和3.x降级到2.x版本命令
最新版Vue或者指定版本
Vue2.6.11按需模块安装配置
jQuery
jQuery在页面加载时动态修改图片尺寸的方法
jquery操作select(取值,设置选中)
FullCalendar中文文档:Event日程事件
JS 之 重定向
javascript截取video视频第一帧作为封面方案
HTML <video> preload 属性
jQuery使用ajax提交post数据
JS截取视频靓丽的帧作为封面
H5案例分享:移动端touch事件判断滑屏手势的方向
Windows环境下curl的使用
Cygwin
Windows下安装Cygwin及apt-cyg
Cygwin 安装、CMake 安装
mklink命令 详细使用
Nginx
Nginx高级篇-性能优化
Nginx常用命令(Linux)
linux+docker+nginx如何配置环境并配置域名访问
Nginx的启动(start),停止(stop)命令
linux 查看nginx 安装路径
Linux 查看 nginx 安装目录和配置文件路径
【NGINX入门】3.Nginx的缓存服务器proxy_cache配置
thinkphp6.0 伪静态失效404(win下)
nginx rewrite及多upstream
Nginx负载均衡(upstream)
耦合?依赖?耦合和依赖的关系?耦合就是依赖
PHP常用六大设计模式
分布式与集群
Nginx 实践案例:反向代理单台web;反向代理多组web并实现负载均衡
Docker
30 分钟快速入门 Docker 教程
linux查看正在运行的容器,说说Docker 容器常用命令
Windows 安装Docker至D盘
win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目1
win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目2
docker 容器重命名
Linux docker常用命令
docker 搭建php 开发环境 添加扩展redis、swoole、xdebug
docker 单机部署redis集群
Docker 退出容器不停止容器运行 并重新进入正在运行的容器
进入退出docker容器
使用异常处理
docker容器中bash: vi: command not found
OCI runtime exec failed: exec failed:解决方法
docker启动容器慢,很慢,特别慢的坑
解决windows docker开发thinkphp6启动慢的问题
【Windows Docker】docker挂载解决IO速度慢的问题
Docker的网络配置,导致Docker使用网路很慢的问题及解决办法
golang工程部署到docker容器
Kubernetes
RabbitMQ
php7.3安装使用rabbitMq
Windows环境PHP如何使用RabbitMQ
RabbitMQ学习笔记:4369、5672、15672、25672默认端口号修改
Window10 系统 RabbitMQ的安装和简单使用
RabbitMQ默认端口
RabbitMQ可视化界面登录不了解决方案
RocketMQ
Kafka
ActiveMQ
phpMQTT详解以及处理使用过程中内存耗死问题
MQTT--物联网(IoT)消息推送协议
php实现mqtt发布/发送 消息到主题
Mqtt.js 的WSS链接
如何在 PHP 项目中使用 MQTT
emqx 修改dashboard 密码
Windows 系统中单机最大TCP的连接数详解
Linux系统EMQX设置开机自启
Centos7 EMQX部署
网易云音乐基于 Flink + Kafka 的实时数仓建设实践
实时数仓-基于Flink1.11的SQL构建实时数仓探索实践
网站如何保护用户的密码
关于web项目sessionID欺骗的问题
php的sessionid可以伪造,不要用来做防刷新处理了
DVWA-Weak Session IDs (弱会话)漏洞利用方式
保证接口数据安全的10种方案
cookie和session的窃取
万能密码漏洞
黑客如何快速查找网站后台地址方法整理
网站后台万能密码/10大常用弱口令
万能密码漏洞02
大多数网站后台管理的几个常见的安全问题注意防范
token可以被窃取吗_盗取token
token被劫持[token被劫持如何保证接口安全性]
PHP给后台管理系统加安全防护机制的一些方案
php - 重新生成 session ID
隐藏响应中的server和X-Powered-By
PHP会话控制之如何正确设置session_name
Session攻击001
PHP防SQL注入代码,PHP 预防CSRF、XSS、SQL注入攻击
php25个安全实践
php架构师 系统管理员必须知道的PHP安全实践
Linux服务器关联Git,通过执行更新脚本实现代码同步
PHP通过exec执行git pull
git 在linux部署并从windows上提交代码到linux
git上传到linux服务器,git一键部署代码到远程服务器(linux)
linux更新git命令,使用Linux定时脚本更新服务器的git代码
git異常
如何解决remote: The project you were looking for could not be found
git status显示大量文件修改的原因是什么
git使用
git常用命令大全
centos git保存账户密码
GIT 常用命令
git怎样还原修改
Git 如何放弃所有本地修改的方法
Git忽略文件模式改变
git: 放弃所有本地修改
H5浏览器支持播放格式:H264 AVCA的MP4格式,不能转换为mpeg-4格式,
iOS无法播放MP4视频文件的解决方案 mp4视频iphone播放不了怎么办
h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等
【Linux 并发请求数】支持多少并发请求数
Linux下Apache服务器并发优化
redis
Linux启动PHP的多进程任务与守护redis队列
golang