php教程

Zip压缩文件夹php打包函数代码

php教程 51源码 2024-06-27 人阅读

分享一个我的站长站自用的Zip压缩文件夹php打包函数代码,Zip相关函数是PHP的扩展功能,此函数可以直接复制使用。

以下是代码:

<?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.51yma.cn/jiaocheng/php/1475.html
文章来源: