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 05 PHP
简化php模板页面中分页代码的解析
Feb 06 PHP
用PHP查询搜索引擎排名位置的代码
Jan 05 PHP
php GeoIP的使用教程
Mar 09 PHP
php数据库抽象层 PDO
May 07 PHP
解析使用ThinkPHP应该掌握的调试手段
Jun 20 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
学习php开源项目的源码指南
Dec 21 PHP
php数组键名技巧小结
Feb 17 PHP
PHP Cookie学习笔记
Aug 23 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 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 mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
PHP 基本语法格式
2009/12/15 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
offsetParent 算法分析
2010/04/05 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
网上开商店的创业计划书
2014/01/19 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
党性分析材料格式
2014/12/19 职场文书
见义勇为事迹材料
2014/12/24 职场文书
Python编写nmap扫描工具
2021/07/21 Python
使用refresh_token实现无感刷新页面
2022/04/26 Javascript