PHP使用自带的ZipArchive类,实现压缩文件目录
文章共分为两部分
1.第一部分使用PHP ZipArchive类压缩目录
2.第二部分开启php_zip.dll配置
第一部分使用PHP ZipArchive类压缩目录
调用zip()方法文件会生成zip包自动下载 根据需要将文件路径替换即可
function zip(){$files = array(ROOT_PATH.'/public/Uploads/');//$files = array('upload/qrcode/1/1.jpg');$zipFile = ROOT_PATH.'/public/upload/download/'.date("Ymd").'/';$zipName = $zipFile.uniqid().'.zip';$zip = new \ZipArchive();if( !file_exists($zipFile) ) mkdir($zipFile, 0777, true); $res = $zip->open($zipName, \ZipArchive::OVERWRITE | \ZipArchive::CREATE);if($res){$this->compressDir($files[0],$zip);$zip->close();}if(!file_exists($zipName)){exit("无法找到文件"); //即使创建,仍有可能失败}//如果不要下载,下面这段删掉即可,如需返回压缩包下载链接,只需 return $zipName;header("Cache-Control: public");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename='.basename($zipName)); //文件名header("Content-Type: application/zip"); //zip格式的header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件header('Content-Length: '. filesize($zipName)); //告诉浏览器,文件大小@readfile($zipName);exit();}function compressDir($files, $zip, $prev=''){$handler = opendir($files);$basename = basename($files);$zip->addEmptyDir($prev . '/' . $basename);while($file = readdir($handler)){$realpath = $files . '/' . $file;if(is_dir($realpath)){if($file !== '.' && $file !== '..'){$zip->addEmptyDir($prev . '/' . $basename . '/' . $file);$this->compressDir($realpath, $zip, $prev . '/' . $basename);}}else{$zip->addFile($realpath, $prev. '/' . $basename . '/' . $file);}}closedir($handler);return null;}
第二部分开启php_zip.dll配置
Windows环境:
1.首先需要从官网上下载,下载地址 https://windows.php.net/downloads/pecl/releases/zip/
2.打开官网列表后需要查找适合自己的PHP版本和系统的zip,我的PHP版本是5.5的,这里我选择的版本号是1.13.5
3.下载完后解压,把里面的php_zip.dll文件放到PHP的扩展文件夹里
扩展文件夹路径一般都是在PHP版本文件夹里的ext文件夹,譬如我的就是D:\phpStudy\PHPTutorial\php\php-7.1.13-nts\ext
4.把php_zip.dll文件放进去后,打开PHP的配置文件php.ini,添加extension=php_zip.dll,保存后,重启apache服务器
Linux环境:
1、在Linux下没有php_zip.dll这个文件(有也不会起作用的),所以需要重新编译一下php的zip模块。具体安装方法如下:
cd /usr/src
wget http://pecl.php.net/get/zip
tar -zxvf zip
cd zip-1.x.x
phpize
./configure
make
sudo make instal
其中, 在最后使用make install命令的时候,可能需要用到root的权限,所以建议使用sudo来运行。安装完之后,屏幕上会提示zip.so的位置。然后将其记录下来,如:/usr/local/lib/php/extensions/zip.so。
2、使用root权限修改php.ini(通常可能会在/usr/local/lib/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看):
增加extension = /usr/local/lib/php/extensions/zip.so,然后同样在php.ini文件中,将 zlib.output_compression = Off 改为 zlib.output_compression = On ;
3、最后别忘了重启一下Apache:apachectl restart;
这个针对php的zip模块就安装完成了,能够在php中使用ZipArchive类了。
ps:查看php.ini文件位置的方法是:
<?phpecho phpinfo();
?>
PHP使用自带的ZipArchive类,实现压缩文件目录相关推荐
- php php_zip.dll,PHP如何开启自带的ZipArchive类,实现压缩解压功能
Windows环境: 打开官网列表后需要查找适合自己的PHP版本和系统的zip,我的PHP版本是5.5的,这里我选择的版本号是1.13.5 image.png 下载完后解压,把里面的php_zip.d ...
- 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...
- PHP之Zip扩展,解压缩文件,ZipArchive类
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...
- CodeIgniter自带的数据库类使用介绍
为什么80%的码农都做不了架构师?>>> 在 CodeIgniter 中,使用数据库是非常频繁的事情.你可以使用框架自带的数据库类,就能便捷地进行数据库操作. 初始化数据库类 ...
- php ziparchive(),php的ZipArchive类用法实例
本文实例讲述了php的ZipArchive类用法,分享给大家供大家参考.具体如下: 通常来说,php5.2开始支持ZipArchive类,php4只能使用zip函数.其实在官方实现zip类之前,已经有 ...
- 用dotnet自带的mail类发邮件出现的问题
在使用dotnet自带的mail类发送邮件的时候,因为默认的smtp端口是25,如果更改了smtp的端口号,则需加上 MailMessage msg = new MailMessage(); msg. ...
- c++面向对象高级编程 学习二 带指针的类
带指针的类,必须要自己写拷贝构造和赋值构造 拷贝构造:参数和类的类型一样的构造函数 赋值构造:重写操作符=,且其参数和类的类型一样 class String {public: String(const ...
- c++面向对象高级编程 学习一 不带指针的类
复数类 complex 是一个不带指针的类,其声明如下: class complex {public: complex(double r=0,double i=0):re(r),im(i){} com ...
- java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)
转载 转载自:http://www.tuicool.com/articles/nMNVVj Java 自带的数据加密类MessageDigest(MD5或SHA加密) 说明: 在网站中,为了保护网站会 ...
最新文章
- 阿里云文件存储和自我管理的云解决方案的TCO比较
- 2017年全球光伏需求有望首次突破100吉瓦
- kettle优化抽取数据速度_数据异构工具介绍
- iOS UI_APPEARANCE_SELECTOR
- 几种简单的排序算法(JAVA)
- java springmvc mybatis mysql
- python 控制有线网卡_Python 使用指定的网卡发送HTTP请求的实例
- php使用redis存储
- MySQLdb操作mysql数据库的两个细节
- 火炬之光模型导出(Unity载入火炬之光的模型)
- w10自动删除文件怎么关了_绝地求生怎么删除新地图_删新沙漠地图文件办法
- DocumentFragment文档碎片(高效批量更新多个节点)
- Windows8 RP版亲手体验全过程
- 牛学长苹果数据管理工具
- matlab中如何画柱状图,matlab如何画柱状图?matlab绘制柱状图教程
- VMware 安装心得
- word中输入空格变点
- 公司财务笔记-岭南学院辅修
- PHP Startup: Unable to load dynamic library 解决办法
- java 如何杀线程,您如何杀死Java中的线程?
热门文章
- 《 计算机应用基础》模拟试卷,《计算机应用基础》模拟试卷一
- 基于SSM+SpringBoot+MySQL+VUE的酒店入住信息管理系统(附论文)
- VOLO Vision Outlooker for Visual Recognition论文分析
- jmeter参数传递三种方法
- 以太网、令牌环、FDDI、ATM、WLAN
- 怎么利用完成端口监听多个不同端口的socket
- 【嵌入式Linux】基于orangepi的官方外设开发
- Apache Traffic Server安装配置
- android 10文件权限 三星,三星Android系统文件夹全解
- 如何快速制作专属的电子名片?这简单的五步操作让你快速拥有