该方法使用PHP的自带类 ZipArchive 来实现压缩文件的创建和添加,从而实现单文件或多文件的压缩

类官方文档:
https://www.php.net/manual/zh/class.ziparchive.php
参考文字地址:
https://blog.csdn.net/qq_33858250/article/details/80586370

目前实现:

单文件/多文件压缩

  1. <?php
  2. /**
  3. * 基础的文件压缩
  4. * 扩展
  5. * 压缩文件下载
  6. * 指定目录压缩
  7. * 流程封装
  8. */
  9. $zip = new ZipArchive();
  10. $path = [
  11. './demo.txt',
  12. './l.php',
  13. ];
  14. $fileName = 'testZip.zip';
  15. // 打开一个指定位置的压缩包,如果不存在则创建
  16. if ($zip->open($fileName, ZIPARCHIVE::CREATE)!==TRUE) {
  17. exit("cannot open <$filename>\n");
  18. }
  19. // 单文件压缩
  20. // $zip->addFile($path,basename($path));
  21. // 多文件压缩, 循环添加文件
  22. foreach ($path as $k => $file){
  23. $zip->addFile($file, basename($file));
  24. }
  25. // 获取压缩包内文件数量
  26. echo "压缩包文件数量:".$zip->numFiles . "\r\n";
  27. // 关闭压缩包
  28. $zip->close();
  29. echo "执行完成";

指定目录压缩

<?php

function addFileToZip($path, $zip)
{
    $handler = opendir($path); //打开当前文件夹由$path指定。
    while (($filename = readdir($handler)) !== false) {
        if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path . "/" . $filename, $zip);
            } else { //将文件加入zip对象
                $zip->addFile($path . "/" . $filename);
            }
        }
    }
    @closedir($path);
}

$zip = new ZipArchive();
if ($zip->open('./rsa.zip', ZipArchive::CREATE) === TRUE) {
    addFileToZip("./zipTest/", $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
}