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 相关文章推荐
整理的9个实用的PHP库简介和下载
Nov 09 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
PHP防止注入攻击实例分析
Nov 03 PHP
php获取QQ头像并显示的方法
Dec 23 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
PHP在线书签系统分享
Jan 04 PHP
smarty学习笔记之常见代码段用法总结
Mar 19 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
php框架知识点的整理和补充
Mar 01 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中的phpinfo()函数
2013/06/06 PHP
php模拟post提交数据的方法
2015/02/12 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
yii用户注册表单验证实例
2015/12/26 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python get获取页面cookie代码实例
2018/09/12 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python logging设置level失败的解决方法
2020/02/19 Python
pandas分批读取大数据集教程
2020/06/06 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
抄袭同学作业检讨书1000字
2014/11/20 职场文书
社会实践单位意见
2015/06/05 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python