TP5之 使用PHP自带的 ZipArchive 压缩文件/文件夹

参考
https://blog.csdn.net/qq15577969/article/details/115733504

安装扩展

2、把解压的php_zip.dll文件放到php-5.6.27-nts/ext目录

3、在php.ini添加以下配置:

extension=php_zip.dll

4、重启Apache

程序

/**
 ** @name='压缩'
 */
public function zip() {
	if(request()->isPost()) {
		try {
			//文件夹目录
			$dirPath=ROOT_PATH.'/demo/';
			//zip压缩包保存路径
			$zipPath= ROOT_PATH."/public/update/demo.zip";
			//创建zip实例
			$zip=new \ZipArchive();
			if($zip->open($zipPath, \ZipArchive::CREATE|\ZipArchive::OVERWRITE)=== TRUE) {
				//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
				addFileToZip($zip,$dirPath,$dirPath);
				//关闭处理的zip文件					
				$zip->close();
			}
		}
		catch (\Exception $e) {
			$this->error('压缩失败,Error:'.$e);
		}
		$this->success('压缩成功');
	}
}


/**
 * 添加文件夹里的文件到zip
 * @param  zip   ZipArchive对象
 * @param  path  源文件夹路径
 * @param  root  源文件夹根目录
 * 补充说明:第三个参数建议和第二个参数一样,因为递归会修改第二个参数的值,因此必须传第三个参数
 */
function addFileToZip($zip,$path,$root){
    $handler=opendir($path); //打开当前文件夹
    while(($filename=readdir($handler))!==false){	
        if($filename != "." && $filename != ".."){//不操作名字为'.'和'..'的文件夹或文件
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($zip,$path."/".$filename,$root);
            }else{ 
				//将文件加入zip对象,第二个参数是zip里文件的路径
				$pathFilename=$path . "/" . $filename;
                $zip->addFile($pathFilename, str_replace($root.'/','',$pathFilename));
            }
        }
    }
    @closedir($path);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值