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
PHP5+UTF8多文件上传类
Oct 17 PHP
memcache命令启动参数中文解释
Jan 13 PHP
设置php页面编码的两种方法示例介绍
Mar 03 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
php session_decode函数用法讲解
May 26 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
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
javascript实现连续赋值
2015/08/10 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
大学教师年终总结的自我评价
2013/10/29 职场文书
高级工程师英文求职信
2014/03/19 职场文书
开业典礼主持词
2014/03/21 职场文书
大三学习计划书范文
2014/05/02 职场文书
计划生育标语
2014/06/23 职场文书
党代会心得体会
2014/09/04 职场文书
教师岗位职责
2015/02/03 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
银行工作心得体会范文
2016/01/23 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL