技术饭

PHP ZipArchive 类库压缩、解压Zip文件

copylian    0 评论    198 浏览    2020.03.20

PHP ZipArchive 类库压缩、解压Zip文件,PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法请自行百度。

一、解压缩zip文件

//新建一个ZipArchive的对象

$zip = new \ZipArchive;

/*

通过ZipArchive的对象处理zip文件

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

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

*/

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

        //假设解压缩到在当前路径下images文件夹的子文件夹php

        $zip->extractTo('images');

        //关闭处理的zip文件

        $zip->close();

}

二、将文件压缩成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){

        //假设加入的文件名是image.txt,在当前路径下

        $zip->addFile('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文件

/**

 * [addFileToZip 压缩文件夹]

 * @param [type] $path [目录]

 * @param [type] $zip  [zip对象]

 * @param string $dir  [二级循环目录]

 */

function addFileToZip($path, $zip, $dir = '') {

    //打开当前文件夹由$path指定

    $handler = opendir($path);

    /*

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

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

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

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

    */

    while (($filename = readdir($handler)) !== false) {

        if ($filename != "." && $filename != "..") {

            //文件夹文件名字为'.'和'..',不要对他们进行操作

            if (is_dir($path . "/" . $filename)) {

            //如果是目录则新建目录

            if($dir == ''){

            $empty_dir = $filename;

            } else {

            $empty_dir = $dir."/".$filename;

            }

            $zip->addEmptyDir($empty_dir);


                //如果读取的某个对象是文件夹,则递归,第三个参数是目录

                addFileToZip($path . "/" . $filename, $zip, $empty_dir);

            } else {

            if($dir == ''){

                //将文件加入zip对象,并重命名

                $zip->addFile($path . "/" . $filename, $filename);

            } else {

            //保留原始目录结构

            $zip->addFile($path . "/" . $filename, $dir . '/' . $filename);

            }

            }

        }

    }

    @closedir($path);

}

//压缩文件夹

      $zip = new \ZipArchive();

      if($zip->open($data_config['save_path'].'.zip', \ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE) === TRUE) {

          //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法

          addFileToZip($data_config['save_path'], $zip);

          //关闭处理的zip文件

          $zip->close(); 

        }

参考资料:https://www.php.net/manual/en/class.ziparchive.php

CopyLian
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
php ZipArchive 压缩 解压 zip 

文明上网理性发言!

  • 还没有评论,沙发等你来抢