ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP使用ZipArchive压缩、解压缩、加密压缩包等

2022-09-11 14:31:57  阅读:75  来源: 互联网

标签:rootPath zip filePath zipFile 解压缩 localPath ZipArchive PHP row


<?php
use ZipArchive;

class Zip
{
    /**
     * @var array $files 需要压缩的文件或文件夹
     */
    public $files = [];

    /**
     * 排除的文件
     */
    public $notFile = [];

    /**
     * 压缩或者解压密码
     */
    public $passowrd = null;

    //压缩包名字及输出地址
    public $zipName = 'package.zip';

    //检测的根目录,默认为APP根目录
    public $rootPath = AR;

    private function  addDir($folder, $zipFile, $rootPath, $folderSub = null)
    {
        // $folder = $this->rootPath . $folderb;
        if (is_dir($folder)) {
            $handle = opendir($folder);
            while (false !== $f = readdir($handle)) {
                if ($f != '.' && $f != '..') {
                    // Remove prefix from file path before add to zip.
                    $localPath = substr($filePath, $rootPath);
                    if (is_file($filePath)) {
                        $this->addFile($filePath, $localPath, $zipFile);
                    } elseif (is_dir($filePath)) {
                        // Add sub-directory.
                        $zipFile->addEmptyDir($localPath);
                        $this->addDir($filePath, $zipFile, $rootPath, $folderSub);
                    }
                }
            }
            closedir($handle);
        } else {
            $this->addFile($folder, $folderSub, $zipFile);
        }
    }

    private function addFile($filePath, $localPath, $zipFile)
    {
        $zipFile->addFile($filePath, $localPath);
        if ($this->passowrd) {
            $zipFile->setEncryptionName($localPath, ZipArchive::EM_AES_256);
        }
    }

    /**
     * 打包成ZIP
     */
    public function zip()
    {
        $zip = new ZipArchive();
        $zip->open(AR . $this->zipName, ZIPARCHIVE::CREATE);
        if ($this->passowrd) {
            $zip->setPassword($this->passowrd);
        }
        foreach ($this->files as $row) {
            $pathInfo = pathinfo($this->rootPath . $row);
            is_dir($this->rootPath . $row) ? $zip->addEmptyDir($pathInfo['basename']) : '';
            $z = $this->addDir($this->rootPath . $row, $zip, strlen($pathInfo['dirname'] . '/'), $row);
        }
        foreach ($this->notFile as $row) {
            $zip->deleteName($row);
        }
        $zip->close();
        return $z;
    }

    /**
     * 解压压缩包
     */
    public function uzip($file, $path)
    {
        $zip = new ZipArchive();
        $this->passowrd ? $zip->setPassword($this->passowrd) : '';
        $zip->open($file);
        $zip->extractTo($path);
        $zip->close();
    }
}

为防止网络爬虫,已删除关键代码,如有需要请发送博客地址到下边提示的邮箱里

标签:rootPath,zip,filePath,zipFile,解压缩,localPath,ZipArchive,PHP,row
来源: https://www.cnblogs.com/xfstu/p/16683930.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有