PHP将文件夹的文件压缩到Zip包里

技术分享3940
事情的经过是因为我正在写授权系统需要用到Zip相关的函数,因为Zip相关函数是PHP的扩展功能,之前没有了解过,还有太懒了一直拖着,直到今天我才写出来实现相关功能。以下是代码:

事情的经过是因为我正在写授权系统需要用到Zip相关的函数,因为Zip相关函数是PHP的扩展功能,之前没有了解过,还有太懒了一直拖着,直到今天我才写出来实现相关功能。

以下是代码:

PHP将文件夹的文件压缩到Zip包里 PHP将文件夹的文件压缩到Zip包里 技术分享

<?php
/*
 * 技术博客版权所有
 */

# 将文件夹的文件压缩到文件里
class Zip
{
    /**
     * 将目标文件夹下的内容压缩到zip中(zip包含文件夹目录)
     * @param $sourcePath *文件夹路径 例: /home/test
     * @param $outZipPath *zip文件名(包含路径) 例: /home/zip_file/test.zip
     * @return string
     */
    public static function zipFolder($sourcePath, $outZipPath)
    {
        $parentPath = rtrim(substr($sourcePath, 0, strrpos($sourcePath, '/')),"/")."/";
        $dirName = ltrim(substr($sourcePath, strrpos($sourcePath, '/')),"/");

        $sourcePath=$parentPath.'/'.$dirName;//防止传递'folder'文件夹产生bug

        $z = new \ZipArchive();
        $z->open($outZipPath, \ZIPARCHIVE::CREATE);//建立zip文件
        $z->addEmptyDir($dirName);//建立文件夹
        folderToZip($sourcePath, $z, strlen("$parentPath/"));
        $z->close();
        return $outZipPath;
    }

    public static function folderToZip($folder, &$zipFile, $exclusiveLength)
    {
        $handle = opendir($folder);
        while (false !== $f = readdir($handle)) {
            if ($f != '.' && $f != '..') {
                $filePath = "$folder/$f";
                // 在添加到zip之前从文件路径中删除前缀
                $localPath = substr($filePath, $exclusiveLength);
                if (is_file($filePath)) {
                    $zipFile->addFile($filePath, $localPath);
                } elseif (is_dir($filePath)) {
                    // 添加子文件夹
                    $zipFile->addEmptyDir($localPath);
                    self::folderToZip($filePath, $zipFile, $exclusiveLength);
                }
            }
        }
        closedir($handle);
    }
}


打赏
版权声明本文地址:https://www.jishubk.com/post/4.html
1.文章若无特殊说明,均属本站原创,若转载文章请于作者联系。
2.本站除部分作品系原创外,其余均来自网络或其它渠道,本站保留其原作者的著作权!如有侵权,请与站长联系!
技术博客

欢迎发表评论:

评论列表

暂时没有评论

暂无评论,快抢沙发吧~

扫码二维码