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加密) 说明: 在网站中,为了保护网站会 ...
最新文章
- Swift 中的内存管理详解
- 白话科普,10s 了解 API
- Xshell配置ssh免密码登录-密钥公钥(Public key)
- Eclipse的Mockito模板
- sqlserver 递归查询
- Spring Boot 9-FreeMarker模板引擎
- Reachability
- 【bzoj4542】[Hnoi2016]大数 莫队算法
- swiper vue 初始化方法_详解swiper在vue中的应用(以3.0为例)
- windows连接linux
- 微积分学基本定理简介
- 【平面设计基础】03:绘制—图标到底有多重要
- 用计算机运算符编写检索式,在计算机检索中,常用的布尔逻辑算符有哪几种
- android手机控制家用电器,手机遥控电脑!教你用手机控制家里电脑
- 聊一聊为什么在浏览器输入http://localhos8080会出现tomcat后台服务器的界面
- Excel批量选中表格中所有图片
- EMIS系统理论及简单理解(后续持续添加)
- centos系统安装中文字体几种方法
- 搞懂Python切片中start、end、steps正负的区别
- 捷联惯导算法(二)位置更新算法的理解