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面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
PHP中数组的三种排序方法分享
May 07 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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代码
2012/06/08 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
PHP中文乱码解决方案
2015/03/05 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
jQuery的框架介绍
2016/05/11 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
django批量导入xml数据
2016/10/16 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
我的求职择业计划书
2014/04/04 职场文书
卖房协议书
2014/04/11 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
秋季运动会加油词
2015/07/18 职场文书
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电