php 压缩zip包压缩和实现zip包加密zip类

官网类:

class HZip
{
    /**
     * Add files and sub-directories in a folder to zip file.
     * @param string $folder
     * @param ZipArchive $zipFile
     * @param int $exclusiveLength Number of text to be exclusived from the file path.
     */
    private static function folderToZip($folder, &$zipFile, $exclusiveLength) {
        $handle = opendir($folder);
        while (false !== $f = readdir($handle)) {
            if ($f != '.' && $f != '..') {
                $filePath = "$folder/$f";
                // Remove prefix from file path before add to zip.
                $localPath = substr($filePath, $exclusiveLength);
                if (is_file($filePath)) {
                    $zipFile->addFile($filePath, $localPath);
                } elseif (is_dir($filePath)) {
                    // Add sub-directory.
                    $zipFile->addEmptyDir($localPath);
                    self::folderToZip($filePath, $zipFile, $exclusiveLength);
                }
            }
        }
        closedir($handle);
    }

    /**
     * Zip a folder (include itself).
     * Usage:
     *   HZip::zipDir('/path/to/sourceDir', '/path/to/out.zip');
     *
     * @param string $sourcePath Path of directory to be zip.
     * @param string $outZipPath Path of output zip file.
     */
    public static function zipDir($sourcePath, $outZipPath)
    {
        $pathInfo = pathInfo($sourcePath);
        $parentPath = $pathInfo['dirname'];
        $dirName = $pathInfo['basename'];

        $z = new ZipArchive();
        $z->open($outZipPath, ZIPARCHIVE::CREATE);
        $z->addEmptyDir($dirName);
        self::folderToZip($sourcePath, $z, strlen("$parentPath/"));
        $z->close();
    }
}

使用此类可以添加文件夹

Hzip::zipDir(‘d://www/aa/’,d://aa.zip);

如果添加多个文件夹到一个zip包需要重复调用

如果想继续在zip包中增加文件:

$zip = new ZipArchive();
$zip->open(d://aa.zip)
 
 
$zip->addFile('d://www/aa.txt','aa.txt'); 
如果需要增加多个 使用循环添加
$zip->close();

<?php
/**
 * Created by PhpStorm.
 * User: tc
 */

class Zip
{
    public $pathExe;
    public $agent = 'linux';
    public function __construct(){
        $this->pathExe = dirname(__FILE__);
        $agent = strtolower(PHP_OS);
        if(strstr($agent, 'win')) {
            $this->agent = 'win';
        }
    }

    public function zip($sourcePath,$fileList=array(),$outPath,$zipName,$password='',$relative="../../../vendor/Zip/"){
        try{
            $fileStr = implode(" ",$fileList);
            chdir($sourcePath);
            $sourcePath = $this->pathDeal($sourcePath);
            $zipbool = true;
            if($zipbool){
                if($this->agent=='win'){
                    if($password==''){
                        exec('"'.$this->pathExe.DIRECTORY_SEPARATOR.'zip.exe"'." -q -r ".$zipName." ".$fileStr);
                    }else{
                        exec('"'.$this->pathExe.DIRECTORY_SEPARATOR.'zip.exe"'." -q -r -P ".$password." ".$zipName." ".$fileStr);
                    }
                }else{
                    if($password==''){
                        exec("zip -q -r ".$zipName." ".$fileStr);
                    }else{
                        exec("zip -q -r -P ".$password." ".$zipName." ".$fileStr);
                    }
                }
                $outPath = $this->pathDeal($outPath);
                if(file_exists($sourcePath.DIRECTORY_SEPARATOR.$zipName)){
                    $bool = copy($sourcePath.DIRECTORY_SEPARATOR.$zipName,$outPath.DIRECTORY_SEPARATOR.$zipName);
                    if($bool){
                        return json_encode(array('result'=>true,'message'=>''));
                    }else{
                        return json_encode(array('result'=>false,'message'=>'zip is exist but not copy to outpath'));
                    }
                }else{
                    return json_encode(array('result'=>false,'message'=>'zip error'));
                }
            }else{
                return json_encode(array('result'=>false,'message'=>'zip command error'));
            }
        }catch(Exception $e){
            return json_encode(array('result'=>true,'message'=>json_encode($e)));
        }
    }
    protected function pathDeal($path){
        $lastword = substr($path,-1);
        if($lastword==DIRECTORY_SEPARATOR){
            $path = substr($path,0,-1);
        }
        return $path;
    }

    public function unzip($sourceZip,$destination,$password){
        try{
            if($this->agent=='win'){
                chdir($this->pathExe);
                exec("unzip.exe -o -P ".$password." ".'"'.$sourceZip.'"'." -d ".'"'.$destination.'"',$res,$return);
            }else{
                exec("unzip -o -P ".$password." ".$sourceZip." -d ".$destination,$res,$return);
            }

            return json_encode(array('result'=>true,'message'=>''));
        }catch (Exception $e){
            return json_encode(array('result'=>true,'message'=>json_encode($e)));
        }
    }
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰明子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值