PHP 实现压缩解压操作

更新日期: 2019-06-13阅读: 2.3k标签: 压缩

php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作

在PHP中有一个ZipArchive类,专门用于文件的压缩解压相关操作

在ZipArchive类中主要使用到了如下方法:


1:open(打开一个压缩包文件)

$zip = new \ZipArchive;
$zip->open('test_new.zip', \ZipArchive::CREATE)

第一个参数:要打开的压缩包文件

第二个参数:

ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉
ZIPARCHIVE::CREATE 如果指定的zip文件不存在,则新建一个
ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错
ZIPARCHIVE::CHECKCONS 对指定的zip执行其他一致性测试


2:addFile(将指定文件添加到压缩包中)

//将test.txt文件添加到压缩包中
$zip->addFile('test.txt'); //第二个参数可对文件进行重命名


3:addEmptyDir (将指定空目录添加到压缩包中)

//将一个空的目录添加到zip中
 $zip->addEmptyDir ('newdir');


4:addFromString(将指定内容的文件添加到压缩包)

// 将有指定内容的new.txt文件添加到zip文件中
$zip->addFromString('new.txt', '要添加到new.txt文件中的文本');


5:extractTO(将压缩包解压到指定目录)

 $zip->extractTo('test');

6:getNameIndex(根据索引返回文件名称)

$zip->getNameIndex(0);//返回压缩包中索引为0的文件名称


7:getStream(根据压缩内的文件名称,获取该文件的文本流)

$zip->getStream('hello.txt');


8:renameIndex(根据压缩文件内的索引(从0开始)修改压缩文件内的文件名)

/把压缩文件内第一个文件修改成newname.txt 
$zip->renameIndex(0,'newname.txt');


9:renameName(根据压缩文件内的文件名,修改压缩文件内的文件名)

//把压缩文件内的word.txt修改成newword.txt 
$zip->renameName('word.txt','newword.txt');


10:deleteIndex (根据压缩文件内的索引删除压缩文件内的文件)

/把压缩文件内第一个文件删除 
$zip->deleteIndex (0);


11:deleteName(根据压缩文件内的文件名删除文件)

//把压缩文件内的word.txt删除
$zip->deleteName('word.txt');

上面就是ZipArchive的一些常用方法,下面来一些简单示例


一:创建一个压缩包

$zip = new \ZipArchive;
if ($zip->open('test_new.zip', \ZipArchive::CREATE) === true)
{
    // 将指定文件添加到zip中
    $zip->addFile('test.txt');
    
    // test.txt文件添加到zip并将其重命名为newfile.txt
    $zip->addFile('test.txt', 'newfile.txt');
    
    // 将test.txt文件添加到zip文件中的test文件夹内
    $zip->addFile('test.txt', 'test/newfile.txt');
    
    //将一个空的目录添加到zip中
    $zip->addEmptyDir ('test');
    
    // 将有指定内容的new.txt文件添加到zip文件中
    $zip->addFromString('new.txt', '要添加到new.txt文件中的文本');
    
    //  将有指定内容的new.txt添加到zip文件中的test文件夹
    $zip->addFromString('test/new.txt', '要添加到new.txt文件中的文本');
    
    //将images目录下所有文件添加到zip中
      if ($handle = opendir('images')){
          // 添加目录中的所有文件
          while (false !== ($entry = readdir($handle))){
                if ($entry != "." && $entry != ".." && !is_dir('images/' . $entry)){
                        $zip->addFile('images/' . $entry);
                }
          }
         closedir($handle);
      }
    
    // 关闭zip文件
    $zip->close();
}


二:获取压缩包的文件信息并解压指定压缩包

$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
    //获取索引为0的文件名称
    var_dump($zip->getNameIndex(0));
    
    //将压缩包文件解压到test目录下
    $zip->extractTo('test');
    
    //获取压缩包指定文件的文本流
    $stream = $zip->getStream('test.txt');
    
    // 关闭zip文件
    $zip->close();
    $str = stream_get_contents($stream); //这里注意获取到的文本编码
    var_dump($str);
}


三:修改压缩包内指定文件的文件名称及删除压缩包内指定文件

$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
    //把压缩文件内索引为0的文件修改成newname.txt
    $zip->renameIndex(0,'newname.txt');
    //把压缩文件内的new.txt修改成newword.txt
    $zip->renameName('new.txt','newword.txt');
    //删除压缩文件内索引为0的文件
    $zip->deleteIndex(0);
    //删除压缩文件的test.png
    $zip->deleteName('test.png');
    // 关闭zip文件
    $zip->close();
}


链接: https://www.fly63.com/article/detial/3691

JS/TS语言zip压缩解压缩三方库及其使用

TS语言的Laya项目里,要用typescript对压缩过的文件解压缩。文件是AS3写的工具导出的。下载找到的zlib.js或zlib.min.js文件,自己编写zlib.min.d.ts文件,代码如下:

Apache开启GZIP压缩功能方法

Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台,Gzip在现代浏览器中默认都是支持的,当一个纯文本文件使用Gzip压缩可以减少70%以上的文件大小,本文讲解了如何开启Apache平台上的Gzip压缩功能

webpack 代码压缩

正常情况下,如果我们配置生成环境,webpack会自动帮js压缩,必须配置--mode=production,但是如果我们要把css也压缩的话,问题就来了,css压缩

HBase 有几种压缩方式?

在使用 HBase 的时候,为了节省数据的空间占用,通常我们会为 HBase 设置压缩属性。与其他的表级别属性一样,压缩设置也是针对具体列族进行设置的。HBase 创建表时默认压缩为 NONE ,即没有压缩,除非指定

使用Canvas压缩图片

讲干货,不啰嗦,当涉及对图片有质量压缩要求的时候,可以使用Canvas实现图片压缩。步骤:1.获取img元素,既要压缩的图片2.创建canvas对象3.使用canvas的drawImage方法绘制图片

图片自动压缩

团队开启了一个新项目,希望能在原来项目的工程化基础上再进一步,于是想到了图片自动压缩。这里的图片自动压缩并不是在webpack构建阶段压缩,而是在git commit的时候进行。

js 压缩图片(只缩小体积,不更改图片尺寸)

我们知道现在,手机拍照在10MB左右,体积太大,在上传到服务器前,能不能只缩小图片的体积,而不改变图片尺寸? 这里我们可以通过canvas实现对图片的重新绘制,已便达到图片压缩的效果。

利用 canvas 实现图片压缩

项目中做身份证识别时,需要传送图片的 base64 格式编码,但是手机拍摄的照片都太大了,转成 base64 简直可怕,因此找了一下解决办法,input 标签的 onchange 事件是在上传完文件之后触发。

Nginx优化:网页压缩与缓存时间

Nginx的ngx http .gzip_ module压缩模块提供对文件内容压缩的功能,允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装

javascript 代码是如何被压缩的

随着前端的发展,特别是 React,Vue 等构造单页应用的兴起,前端的能力得以很大提升,随之而来的是项目的复杂度越来越大。此时的前端的静态资源也越来越庞大,而毫无疑问 javascript 资源已是前端的主体资源,对于压缩它的体积至为重要

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!