当前位置:

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

xiaoming 2024-02-15 31 0

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

以下是代码:

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

/*

* Cumin云版权所有

*/

# 将文件夹的文件压缩到文件里

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

}

}

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~
您是本站第8603名访客 今日有1篇新文章