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新手上路(二)
Oct 09 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php获取url参数方法总结
Nov 13 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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
新浪新闻小偷
2006/10/09 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
PHP ajax 分页类代码
2008/11/13 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
flask中的wtforms使用方法
2018/07/21 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
优秀民警事迹材料
2014/01/29 职场文书
企业法人代表任命书
2014/06/06 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
世界遗产导游词
2015/02/13 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL