php实现zip压缩文件解压缩代码分享(简单易懂)


Posted in PHP onMay 10, 2014

仔细的研究了一下,原来用php写的解压程序效率比想象的还是高很多的,既然这么好,干脆再优化一下后用到自己后台中,虽然现在大部分空间的控制面板中有压缩和解压这个功能,但是毕竟有时候有些麻烦。

做这个之前,没有接触过php压缩这一块,网上搜了一些,大多数都是php压缩类、压缩函数,少则几百行,多的就几千行代码。这对于我这种新手来说很摸不到头脑,再说我也不用这么复杂的功能。最后参考函数手册,理清楚了几个相关的函数后,就明白了怎么去整了。

php实现zip压缩文件解压缩代码分享(简单易懂)

记得要开启 zip ,把 php.ini 中的 extension=php_zip.dll 前面的分号去掉。

源码范例:

<?php
//需开启配置 php_zip.dll
//phpinfo();
header("Content-type:text/html;charset=utf-8");
function get_zip_originalsize($filename, $path) {
 //先判断待解压的文件是否存在
 if(!file_exists($filename)){
  die("文件 $filename 不存在!");
 } 
 $starttime = explode(' ',microtime()); //解压开始的时间
 //将文件名和路径转成windows系统默认的gb2312编码,否则将会读取不到
 $filename = iconv("utf-8","gb2312",$filename);
 $path = iconv("utf-8","gb2312",$path);
 //打开压缩包
 $resource = zip_open($filename);
 $i = 1;
 //遍历读取压缩包里面的一个个文件
 while ($dir_resource = zip_read($resource)) {
  //如果能打开则继续
  if (zip_entry_open($resource,$dir_resource)) {
   //获取当前项目的名称,即压缩包里面当前对应的文件名
   $file_name = $path.zip_entry_name($dir_resource);
   //以最后一个“/”分割,再用字符串截取出路径部分
   $file_path = substr($file_name,0,strrpos($file_name, "/"));
   //如果路径不存在,则创建一个目录,true表示可以创建多级目录
   if(!is_dir($file_path)){
    mkdir($file_path,0777,true);
   }
   //如果不是目录,则写入文件
   if(!is_dir($file_name)){
    //读取这个文件
    $file_size = zip_entry_filesize($dir_resource);
    //最大读取6M,如果文件过大,跳过解压,继续下一个
    if($file_size<(1024*1024*6)){
     $file_content = zip_entry_read($dir_resource,$file_size);
     file_put_contents($file_name,$file_content);
    }else{
     echo "<p> ".$i++." 此文件已被跳过,原因:文件过大, -> ".iconv("gb2312","utf-8",$file_name)." </p>";
    }
   }
   //关闭当前
   zip_entry_close($dir_resource);
  }
 }
 //关闭压缩包
 zip_close($resource); 
 $endtime = explode(' ',microtime()); //解压结束的时间
 $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);
 $thistime = round($thistime,3); //保留3为小数
 echo "<p>解压完毕!,本次解压花费:$thistime 秒。</p>";
}
$size = get_zip_originalsize('20131101.zip','temp/');
?>

测试解压了一个300多KB的小文件,花了0.115秒,测试解压了一个30多MB的(网页文件,小文件比较多),花了20多秒。

PHP 相关文章推荐
php中文字母数字验证码实现代码
Apr 25 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 PHP
PHP http请求超时问题解决方案
Nov 13 PHP
php使用正则过滤js脚本代码实例
May 10 #PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 #PHP
php中curl和file_get_content的区别
May 10 #PHP
php实现文件下载功能的几个代码分享
May 10 #PHP
php按百分比生成缩略图的代码分享
May 10 #PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 #PHP
php下获取http状态的实现代码
May 09 #PHP
You might like
PHP开发框架总结收藏
2008/04/24 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
python分布式环境下的限流器的示例
2017/10/26 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
Python如何生成xml文件
2020/06/04 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
水果花束:Fruit Bouquets
2017/12/20 全球购物
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
项目经理岗位职责
2013/11/11 职场文书
新三好学生主要事迹
2014/01/23 职场文书
运动会稿件200字
2014/02/07 职场文书
法律进企业活动方案
2014/03/04 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
评职称个人总结
2015/03/05 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
php字符串倒叙
2021/04/01 PHP