Cumin 发表于 2023-6-30 00:00:00

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

<p>事情的经过是因为我正在写授权系统需要用到Zip相关的函数,因为Zip相关函数是PHP的扩展功能,之前没有了解过,还有太懒了一直拖着,直到今天我才写出来实现相关功能。</p>
<p>以下是代码:</p>
<pre>&lt;?php<br />/*<br /> * Cumin云版权所有<br /> */<br /><br /># 将文件夹的文件压缩到文件里<br />class Zip<br />{<br />    /**<br />   * 将目标文件夹下的内容压缩到zip中(zip包含文件夹目录)<br />   * @param $sourcePath *文件夹路径 例: /home/test<br />   * @param $outZipPath *zip文件名(包含路径) 例: /home/zip_file/test.zip<br />   * @return string<br />   */<br />    public static function zipFolder($sourcePath, $outZipPath)<br />    {<br />      $parentPath = rtrim(substr($sourcePath, 0, strrpos($sourcePath, '/')),"/")."/";<br />      $dirName = ltrim(substr($sourcePath, strrpos($sourcePath, '/')),"/");<br /><br />      $sourcePath=$parentPath.'/'.$dirName;//防止传递'folder'文件夹产生bug<br /><br />      $z = new \ZipArchive();<br />      $z-&gt;open($outZipPath, \ZIPARCHIVE::CREATE);//建立zip文件<br />      $z-&gt;addEmptyDir($dirName);//建立文件夹<br />      folderToZip($sourcePath, $z, strlen("$parentPath/"));<br />      $z-&gt;close();<br />      return $outZipPath;<br />    }<br /><br />    public static function folderToZip($folder, &amp;$zipFile, $exclusiveLength)<br />    {<br />      $handle = opendir($folder);<br />      while (false !== $f = readdir($handle)) {<br />            if ($f != '.' &amp;&amp; $f != '..') {<br />                $filePath = "$folder/$f";<br />                // 在添加到zip之前从文件路径中删除前缀<br />                $localPath = substr($filePath, $exclusiveLength);<br />                if (is_file($filePath)) {<br />                  $zipFile-&gt;addFile($filePath, $localPath);<br />                } elseif (is_dir($filePath)) {<br />                  // 添加子文件夹<br />                  $zipFile-&gt;addEmptyDir($localPath);<br />                  self::folderToZip($filePath, $zipFile, $exclusiveLength);<br />                }<br />            }<br />      }<br />      closedir($handle);<br />    }<br />}</pre>
页: [1]
查看完整版本: PHP将文件夹的文件压缩到Zip包里