精华内容
下载资源
问答
  • ziparchive
    千次阅读
    2021-04-10 11:25:44

    php ZipArchive可以说是php自带的一个函数了,他可对对文件进行压缩与解压缩处理,但是使用此类之前我们必须在php.ini中把extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库。

    ziparchive 可选参数

    1.ZipArchive::addEmptyDir

    添加一个新的文件目录

    2.ZipArchive::addFile

    将文件添加到指定zip压缩包中。

    3.ZipArchive::addFromString

    添加的文件同时将内容添加进去

    4.ZipArchive::close

    关闭ziparchive

    5.ZipArchive::extractTo

    将压缩包解压

    6.ZipArchive::open

    打开一个zip压缩包

    7.ZipArchive::getStatusString

    返回压缩时的状态内容,包括错误信息,压缩信息等等

    8.ZipArchive::deleteIndex

    删除压缩包中的某一个文件,如:deleteIndex(0)删除第一个文件

    9.ZipArchive::deleteName

    删除压缩包中的某一个文件名称,同时也将文件删除。

    ......

    */

    实例

    一、解压缩zip文件

     代码如下复制代码
    $zip = new ZipArchive;//新建一个ZipArchive的对象

    /*

    通过ZipArchive的对象处理zip文件

    $zip->open这个方法的参数表示处理的zip文件名。

    如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE

    */

    if ($zip->open('test.zip') === TRUE)

    {

    $zip->extractTo('images');//假设解压缩到在当前路径下images文件夹的子文件夹php

    $zip->close();//关闭处理的zip文件

    }

    二、将文件压缩成zip文件

     代码如下复制代码
    $zip = new ZipArchive;

    /*

    $zip->open这个方法第一个参数表示处理的zip文件名。

    第二个参数表示处理模式,ZipArchive::OVERWRITE表示如果zip文件存在,就覆盖掉原来的zip文件。

    如果参数使用ZIPARCHIVE::CREATE,系统就会往原来的zip文件里添加内容。

    如果不是为了多次添加内容到zip文件,建议使用ZipArchive::OVERWRITE。

    使用这两个参数,如果zip文件不存在,系统都会自动新建。

    如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE

    */

    if ($zip->open('test.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', 'file content goes here');

    $zip->close();

    echo 'ok';

    } else {

    echo 'failed';

    }

    四、将文件夹打包成zip文件

     代码如下复制代码

    function addFileToZip($path, $zip) {

    $handler = opendir($path); //打开当前文件夹由$path指定。

    /*

    循环的读取文件夹下的所有文件和文件夹

    其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,

    为了不陷于死循环,所以还要让$filename !== false。

    一定要用!==,因为如果某个文件名如果叫'0',或者某些被系统认为是代表false,用!=就会停止循环

    */

    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文件

    }

    如果只知道文件名,而不知到文件的具体路径,可以搜索指定文件名的索引,再依靠索引获取内容。

     代码如下复制代码

    $zip = new ZipArchive;

    if ($zip->open('test.zip') === TRUE) {

    $index=$zip->locateName('example.php', ZIPARCHIVE::FL_NOCASE|ZIPARCHIVE::FL_NODIR);

    $contents = $zip->getFromIndex($index);

    }

    ?>

    上面获取索引依靠 locateName方法,如果压缩包内多个路径下有同名文件,好像只能返回第一个的索引,如果要获取所有同名文件的索引,只能使用笨办法,循环搜索。

     代码如下复制代码

    $zip = new ZipArchive;

    if ($zip->open('test.zip') === TRUE) {

    for($i = 0; $i < $zip->numFiles; $i )

    {

    if(substr_count($zip->getNameIndex($i), 'example.php')>0){

    $contents = $zip->getFromIndex($i);

    }

    }

    }

    ?>

    更多相关内容
  • 主要介绍了php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法,是使用ZipArchive时经常会遇到的问题,需要的朋友可以参考下
  • ZipArchive

    2015-09-09 13:43:15
    iOS 解压缩文件类库,ZipArchive
  • 适用于ZipArchive的Flysystem适配器 安装 composer require league/flysystem-ziparchive 用法 use League \ Flysystem \ Filesystem ; use League \ Flysystem \ ZipArchive \ ZipArchiveAdapter as Adapter ; $ ...
  • SSZipArchive ZipArchive是用于在iOS,macOS和tvOS上压缩和解压缩文件的简单实用程序类。 解压缩zip文件; 解压缩受密码保护的zip文件; 解压缩AES加密的zip文件; 创建zip文件; 创建大文件(> 4.3Gb); 创建受...
  • PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法这里就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整理一下...
  • 在本篇文章里小编给大家整理了关于php利用ZipArchive类实现文件压缩与解压实例代码内容,需要的朋友们学习下。
  • 本文实例讲述了php的ZipArchive类用法,分享给大家供大家参考。具体如下: 通常来说,php5.2开始支持ZipArchive类,php4只能使用zip函数...$zip = new ZipArchive; if ($zip->open(‘test.zip’) === TRUE) {  $zip->e
  • zipArchive

    2015-02-09 19:02:07
    IOS,zip压缩文件解压库
  • IOS应用源码——新版ZipArchive,新增创建以及解压加密rar 文件_ZipArchive.zip
  • ZipArchive压缩文件,这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个...
  • ziparchive_src.zip

    2020-07-24 09:44:46
    ziparchive_src.zip,ziparchive_src,_projects,Visual Studio 2008,Zippie,zippie.sln,zippie.vcproj,ZipArchive,ZipArchive.vcproj,ZipArchive.sln,ZipArc,ZipArc.sln,ZipArc.vcproj,MinGW,Makefile.mingw,Visual ...
  • 主要介绍了php打包压缩文件之ZipArchive方法用法,结合实例形式分析了ZipArchive扩展的具体使用技巧,需要的朋友可以参考下
  • 主要介绍了mysql zip archive 版本(5.7.19)安装教程详细介绍,需要的朋友可以参考下
  • ziparchive-开源

    2021-05-01 20:52:32
    python zipfile模块的新替换模块,克服了其当前限制。 其中一些支持:bzip2(de)压缩,删除存档中的文件,ZIP存档成员的类似文件的对象API,传统的PKWARE加密等。
  • 宝塔面板php7.3版本不支持ZipArchive导致程序无法后台直接更新的解决方法 在SSH命令行界面执行以下语句: cd /www/server/php/73/src/ext/zip/ /www/server/php/73/bin/phpize ./configure –with-...
  • 本篇文章给大家介绍了mysql 5.7.19 winx64 ZIP Archive 安装及使用过程问题小结,需要的朋友可以参考下
  • SSZipArchive ZipArchive是一个简单的实用程序类,用于在iOS,macOS和tvOS上压缩和解压缩文件。 解压缩zip文件; 解压缩受密码保护的zip文件; 解压缩AES加密的zip文件; 创建zip文件; 创建SSZipArchive ZipArchive...
  • ziparchive

    2015-02-11 14:35:19
    ZipArchive is an Objective-C class to compress or uncompress zip files, which is base on open source code "MiniZip". It can be used for iPhone application development, and cocoa on Mac OSX as well.
  • ZipArchive 解压zip

    2019-03-23 01:22:58
    ZipArchive.zip,ZipArchive,.svn,props,all-wcprops,entries,text-base,ZipArchive.mm.svn-base,ZipArchive.h.svn-base,tmp,props,text-base,prop-base,prop-base,ZipArchive.mm,minizip,unzip.h,crypt.h,mztools.h,...
  • zip archive for delphi 5
  • ios应用源码之新版ziparchive,新增创建以及解压加密zip 文件_ziparchive
  • ZipArchive类操作

    2022-06-06 06:07:42
    ZipArchive类的一些常用方法 1:open(打开一个压缩包文件) $zip = new \ZipArchive; $zip->open('test_new.zip', \ZipArchive::CREATE) 参数说明: 第一个参数:要打开的压缩包文件 第二个参数: ZIPARCHIVE::...

    是专门用于文件的压缩与解压操作的类,通过压缩文件可以达到节省磁盘空间的目的,并且压缩文件体积更小,便于网络传输。

    ZipArchive类的一些常用方法

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

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

    参数说明:

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

    2. 第二个参数:

      	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');
    

    简单示例:

    一:创建一个压缩包

    $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();
     
    }
    
    展开全文
  • 新版ZipArchive,新增创建以及解压加密zip 文件_ZipArchive.zipIOS应用例子源码下载新版ZipArchive,新增创建以及解压加密zip 文件_ZipArchive.zipIOS应用例子源码下载 1.适合学生学习研究参考 2.适合个人学习研究...
  • 保持目录结构,压缩整个文件夹为zip包 使用方法 RecursiveIteratorIterator 递归获取文件树(列表)$zip->addFile($filePath, $relativePath); 逐个添加文件到zip压缩包代码来自大佬:...

    效果

    保持目录结构,压缩整个文件夹为zip包

     

    完整代码

    <?php
        
    /**
     * 压缩整个文件夹为zip文件
     */
    function make_zip_file_for_folder ($zip_path = '', $folder_path = '') {
        // Get real path for our folder
        $rootPath = realpath($folder_path);
    
        // Initialize archive object
        $zip = new ZipArchive();
        $zip->open($zip_path, ZipArchive::CREATE | ZipArchive::OVERWRITE);
    
        // Create recursive directory iterator
        /** @var SplFileInfo[] $files */
        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($rootPath),
            RecursiveIteratorIterator::LEAVES_ONLY
        );
    
        foreach ($files as $name => $file)
        {
            // Skip directories (they would be added automatically)
            if (!$file->isDir())
            {
                // Get real and relative path for current file
                $filePath = $file->getRealPath();
                $relativePath = substr($filePath, strlen($rootPath) + 1);
    
                // Add current file to archive
                $zip->addFile($filePath, $relativePath);
            }
        }
    
        // Zip archive will be created only after closing object
        $zip->close();
    }

    使用方法

    $zip_file = '/var/www/abc.zip';

    $zip_dir = '/var/www/abc/';

    make_zip_file_for_folder($zip_file, $zip_dir);

    思路

    RecursiveIteratorIterator 递归获取文件树(列表)

    $zip->addFile($filePath, $relativePath);  逐个添加文件到zip压缩包

    感谢

    代码来自大佬:https://www.cnblogs.com/eleven24/p/10836407.html

    封面

    更多 (凑字数专用)

    看名字就知道,RecursiveIteratorIterator是个递归迭代器,其后可选带四个参数(只能任一)

    RecursiveIteratorIterator::LEAVES_ONLY
    默认,已在__construct中设定使用
    作用是去枝留叶,跳过空节点,只递归取实值
    举例就是
    1.递归文件夹取文件时跳过文件夹本身,只取文件夹下面的文件,输出的项全部是file(文件和各级子文件夹的文件)
    2.多维数组就跳过前几维的key,而取value,输出的每一项都不是array
    3.XML只取值(text),不输出节点名,当然还要视乎你设定获取xml什么内容

    RecursiveIteratorIterator::SELF_FIRST
    各项都包含,例如递归文件夹就会连同子文件夹名称也作为其中项输出,顺序是先父后子

    RecursiveIteratorIterator::CHILD_FIRST
    同上,但顺序是先子后父,./test/test.php会在./test(文件夹)前面

    RecursiveIteratorIterator::CATCH_GET_CHILD
    未明,测试结果和LEAVES_ONLY一样,估计是只取子项。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,848
精华内容 55,939
关键字:

ziparchive

友情链接: cg2.zip