123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- namespace JinDouYun\Model\Common;
- /**
- * demo:
- * $zip = new Zip();
- *
- * 压缩单个文件 $zip->zipFiles('app.zip','index.html');
- *
- * 多文件压缩 $zip->zipFiles('app.zip','index.html');
- *
- * 解压缩 $zip->unzipFile('app.zip','app');
- *
- * 解压缩文件
- * Class Zip
- * @package JinDouYun\Model\Common
- */
- class Zip
- {
- /**
- * 压缩单个文件
- * @method zip_file
- * @param string $filename 文件名
- * @param string $zipName 压缩文件包名
- * @return boolean true|false
- */
- function zipFile(string $filename, string $zipName = '')
- {
- if (!is_file($filename)) {
- return false;
- }
- $zip = new \ZipArchive();
- $zipName = empty($zipName) ? basename($filename) . '.zip' : $zipName;
- //打开指定压缩包,不存在则创建,存在则覆盖
- if ($zip->open($zipName, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
- //将文件添加到压缩包中
- if ($zip->addFile($filename)) {
- $zip->close();
- //@unlink($filename);
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- /**
- * 多文件压缩
- * @method zip_files
- * @param string $zipName 压缩包的名称,.zip结尾
- * @param string $files 需要压缩文件名,可以是多个
- * @return boolean true|false
- */
- function zipFiles(string $zipName, ...$files)
- {
- //检测压缩包名称是否正确
- $zipExt = strtolower(pathinfo($zipName, PATHINFO_EXTENSION));
- if ('zip' !== $zipExt) {
- return false;
- }
- $zip = new \ZipArchive();
- if ($zip->open($zipName, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
- foreach ($files as $file) {
- if (is_file($file)) {
- $zip->addFile($file);
- }
- }
- $zip->close();
- return true;
- } else {
- return false;
- }
- }
- /**
- * 解压缩
- * @method unzip_file
- * @param string $zipName 压缩包名称
- * @param string $dest 解压到指定目录
- * @return boolean true|false
- */
- function unzipFile(string $zipName, string $dest)
- {
- //检测要解压压缩包是否存在
- if (!is_file($zipName)) {
- return false;
- }
- //检测目标路径是否存在
- if (!is_dir($dest)) {
- mkdir($dest, 0777, true);
- }
- $zip = new \ZipArchive();
- if ($zip->open($zipName)) {
- $zip->extractTo($dest);
- $zip->close();
- return true;
- } else {
- return false;
- }
- }
- }
|