关闭

php zip文件的解压与压缩

标签: php zip解压文件php zip 压缩文件
191人阅读 评论(0) 收藏 举报
分类:
header("Content-type:text/html;charset=utf-8");
//解压zip文件
function get_zip_originalsize($filename, $path) {//解压zip文件
    //先判断待解压的文件是否存在
    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>";

}


$zipFile = "1.zip";
$path = "img/";

$size = get_zip_originalsize($zipFile,$path);




//解压zip文件

$zip=new ZipArchive;//新建一个ZipArchive的对象
if($zip->open('1.zip')===TRUE){
    $zip->extractTo('images');//假设解压缩到在当前路径下images文件夹内
    $zip->close();//关闭处理的zip文件
}




//把文件压缩为zip
$zip=new ZipArchive;
if($zip->open('2.zip',ZipArchive::OVERWRITE)===TRUE){
    $zip->addFile('image.txt');//假设加入的文件名是image.txt,在当前路径下
    $zip->close();
}




//文件追加内容到zip
$zip=new ZipArchive;
$res=$zip->open('test.zip',ZipArchive::CREATE);
if($res===TRUE){
    $zip->addFromString('test.txt','hello,xiaobaiyang,you are successful,file content goes here.');
    $zip->close();
    echo 'ok';
}else{
    echo 'failed';
}




//将文件夹打包为zip文件
function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path."/".$filename, $zip);
            }else{ //将文件加入zip对象
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}

$zip=new ZipArchive();
if($zip->open('images.zip', ZipArchive::OVERWRITE)=== TRUE){
    addFileToZip('images/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

http://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PH...
  • loongwong2011
  • loongwong2011
  • 2016-08-29 17:19
  • 1229

C++ zip文件的解压与压缩

1、下载解压文件的库http://download.csdn.net/detail/yimengchenxi/8887025 2、在项目中添加相关文件 在Debug中添加zlib1.dll文件,其...
  • yimengchenxi
  • yimengchenxi
  • 2015-07-10 13:02
  • 8263

一个完美的PHP ZIP压缩类代码

[导读] 本程序可以快速的实现把我们的文件利用php压缩类压缩成我们想的zip,或者rar 的压缩包,后缀名可以自定义哦, 压缩算法是来自国外一个网站抄的。首先实例化,然后传参。两个参数。第一个关于你...
  • slqgenius
  • slqgenius
  • 2016-08-09 07:13
  • 809

JAVA实现实用的ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和...
  • z69183787
  • z69183787
  • 2014-08-14 11:10
  • 2719

nodejs 中压缩/解压方案

项目里要用到archive和unarchive整个已存在的folder,在找解决方案的时候尝试了一些当前比较流行的library,主要有adm-zip, JSZip, archiver等。 假设要压...
  • u010403387
  • u010403387
  • 2015-06-15 10:09
  • 2806

PHP 解压 ZIP 文件到指定文件夹

本类实现参考 php manual 评论 /** * function: 解压zip 格式的文件 * author:friker * date:2015-15-14 * refere...
  • wujiangwei567
  • wujiangwei567
  • 2015-05-16 15:08
  • 4737

C# 文件压缩与解压(ZIP格式)

Hello,大家好,我是网呦,今天分享的内容是:C#操作文件压缩与解压(zip格式)。该文章Core Code 引用于:C#文件压缩与解压 在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流...
  • U_9_5
  • U_9_5
  • 2016-04-29 00:11
  • 704

VC++压缩解压zip文件(支持密码)

只能压缩解压zip格式的,不需要dll或者库文件,核心是HZIP,支持带密码压缩解压。 //压缩 CZipImplement compress; compress.Zip_PackFiles(m_st...
  • sunflover454
  • sunflover454
  • 2015-10-08 22:54
  • 2495

Linux中zip压缩和unzip解压缩命令详解

1、把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2、把/home目录下面的mydata.zip解压到my...
  • zmzwll1314
  • zmzwll1314
  • 2016-09-13 11:34
  • 2734

关于php.ini开启zlib压缩输出导致乱码的问题

关于php.ini开启zlib压缩输出导致输出乱码的问题
  • ljfrocky
  • ljfrocky
  • 2014-12-06 11:58
  • 1760
    个人资料
    • 访问:10939次
    • 积分:352
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章分类