Zip.Class.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace JinDouYun\Model\Common;
  3. /**
  4. * demo:
  5. * $zip = new Zip();
  6. *
  7. * 压缩单个文件 $zip->zipFiles('app.zip','index.html');
  8. *
  9. * 多文件压缩 $zip->zipFiles('app.zip','index.html');
  10. *
  11. * 解压缩 $zip->unzipFile('app.zip','app');
  12. *
  13. * 解压缩文件
  14. * Class Zip
  15. * @package JinDouYun\Model\Common
  16. */
  17. class Zip
  18. {
  19. /**
  20. * 压缩单个文件
  21. * @method zip_file
  22. * @param string $filename 文件名
  23. * @param string $zipName 压缩文件包名
  24. * @return boolean true|false
  25. */
  26. function zipFile(string $filename, string $zipName = '')
  27. {
  28. if (!is_file($filename)) {
  29. return false;
  30. }
  31. $zip = new \ZipArchive();
  32. $zipName = empty($zipName) ? basename($filename) . '.zip' : $zipName;
  33. //打开指定压缩包,不存在则创建,存在则覆盖
  34. if ($zip->open($zipName, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
  35. //将文件添加到压缩包中
  36. if ($zip->addFile($filename)) {
  37. $zip->close();
  38. //@unlink($filename);
  39. return true;
  40. } else {
  41. return false;
  42. }
  43. } else {
  44. return false;
  45. }
  46. }
  47. /**
  48. * 多文件压缩
  49. * @method zip_files
  50. * @param string $zipName 压缩包的名称,.zip结尾
  51. * @param string $files 需要压缩文件名,可以是多个
  52. * @return boolean true|false
  53. */
  54. function zipFiles(string $zipName, ...$files)
  55. {
  56. //检测压缩包名称是否正确
  57. $zipExt = strtolower(pathinfo($zipName, PATHINFO_EXTENSION));
  58. if ('zip' !== $zipExt) {
  59. return false;
  60. }
  61. $zip = new \ZipArchive();
  62. if ($zip->open($zipName, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
  63. foreach ($files as $file) {
  64. if (is_file($file)) {
  65. $zip->addFile($file);
  66. }
  67. }
  68. $zip->close();
  69. return true;
  70. } else {
  71. return false;
  72. }
  73. }
  74. /**
  75. * 解压缩
  76. * @method unzip_file
  77. * @param string $zipName 压缩包名称
  78. * @param string $dest 解压到指定目录
  79. * @return boolean true|false
  80. */
  81. function unzipFile(string $zipName, string $dest)
  82. {
  83. //检测要解压压缩包是否存在
  84. if (!is_file($zipName)) {
  85. return false;
  86. }
  87. //检测目标路径是否存在
  88. if (!is_dir($dest)) {
  89. mkdir($dest, 0777, true);
  90. }
  91. $zip = new \ZipArchive();
  92. if ($zip->open($zipName)) {
  93. $zip->extractTo($dest);
  94. $zip->close();
  95. return true;
  96. } else {
  97. return false;
  98. }
  99. }
  100. }