因为有时候需要批量下载图片,所以需要进行压缩打包进行下载
可以用php自带的 ZipArchive 进行过操作
-
思路:可以先判断文件夹存不存在,存在调用核心方法进行处理
-
核心方法:
/**
* 压缩核心方法
* addtime 2020年7月17日 18:02:57
* @param [type] $dir 要压缩的文件路径
* @param [type] $zip ZipArchive的对象
* @return void
*/
function z_addDir2Zip($dir,$zip)
{
$handler = opendir($dir);
while(( $filename = readdir($handler)) !== false ){
if ($filename != '.' && $filename != "..") {
if(is_dir( $dir . '/' . $filename )){// 如果读取的某个对象是文件夹,则递归
$this->z_addDir2Zip($dir.'/'.$filename,$zip);
// return '继续压缩';
}else{
// 将文件加入zip对象
$zip->addFile($dir.'/'.$filename);
// return '将对象加入压缩文件夹';
}
}
}
@closedir($dir);
return ['code' => 200];
}
/**
* 进行压缩
* addtime 2020年7月17日 18:02:24
* @param [type] $dir 要压缩的文件路径
* @param [type] $zipfile 压缩后的名字
* @return void
*/
function z_zipdir( $dir, $zipfile )
{
$zip = new \ZipArchive();
if($zip->open($zipfile, \ZipArchive::OVERWRITE) === TRUE){
// 这里如果ZipArchive::OVERWRITE调用失败的话(返回9可换成ZipArchive::CREATE)
// 可以参考官方文档 https://www.php.net/manual/zh/ziparchive.open.php
// 原因 pecl zip 版本太低 pecl zip在1.7.0版本才加入了ZIPARCHIVE::OVERWRITE模式
//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$res = $this->z_addDir2Zip( $dir, $zip );
$zip->close(); //关闭处理的zip文件
if ($res['code'] == 200) {
return ['code' => 200];
}
}
}
- 进行调用
# 进行文件夹压缩
$res = $this->z_zipdir("qrcodes","qrcodes.zip");
if ($res['code'] == 200) {
# 压缩成功
# code...
}
觉得有用的小伙伴希望能点个赞支持一下哦