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函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
PHP防止注入攻击实例分析
Nov 03 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
php类的自动加载操作实例详解
Sep 28 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 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 无限级 SelectTree 类
2009/05/19 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
python结合API实现即时天气信息
2016/01/19 Python
python实现三维拟合的方法
2018/12/29 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
django配置app中的静态文件步骤
2020/03/27 Python
工程专业毕业生自荐信范文
2013/12/25 职场文书
就业协议书怎么填
2014/04/11 职场文书
机关保密承诺书
2014/06/03 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
开学典礼致辞
2015/07/29 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers