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 相关文章推荐
example1.php
Oct 09 PHP
php截取后台登陆密码的代码
May 05 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 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的计数器程序
2006/10/09 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
destoon二次开发入门示例
2014/06/20 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
JS实现的找零张数最小问题示例
2017/11/28 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
python抓取网页中的图片示例
2014/02/28 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
社团活动总结格式
2014/08/29 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
党员读书活动心得体会
2016/01/14 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
python实现简单石头剪刀布游戏
2021/10/24 Python