首页 > 教程
fastadmin基于ZipArchive生成压缩文件下载到本地
- 2025-11-17
- 2027 ℃
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启。
数据库图片是多图片以字符串的形式保存,需要转换为数组
前台ajax提交id为多选id,返回压缩后的文件地址,然后下载

/**
* 整理下载图片
* 复制图片到统一文件夹,以id作为文件夹名称
* $ids 选中的id [1,2,3]
*/
public function checks($ids = ''){
$ids = $this->request->post("ids");//页面传值的id
$id = explode(",", $ids);//字符串转数组
if (count($id) > 0) {
$download_name = Random::uuid();//自动生成文件夹名称
foreach ($id as $v) {
$row = $this->model->get(['id' => $v]);//查询数据
$rows = $row->toArray();
if ($rows['id'] && $rows['group_images']) {//group_images:数据库保存图片的字段
$dir = iconv("UTF-8", "GBK", "./ziprar/" . $download_name . "/" . $rows['id']);//图片文件夹放在根目录ziprar里面
if (!file_exists($dir)) {//创建文件夹
mkdir($dir, 0777, true);
}
$gimgs = explode(",", $rows['group_images']);//图片路径整理
foreach ($gimgs as $vs) {
$name_imgs = explode("/", $vs);
$names_imgs = $name_imgs['3'];
$old_img = ROOT_PATH . 'public' . $vs;
$new_img = "./ziprar/" . $download_name . "/" . $rows['id'] . "/" . $names_imgs;
if (!file_exists($new_img)) {
copy($old_img, $new_img);//复制图片
}
}
}
}
$this->zips($download_name);
}
}
/**
* 压缩文件夹
*/
function addFileToZip($path,$zip){
$handler=opendir($path); //打开当前文件夹$path指定的路径。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
$this->addFileToZip($path."/".$filename, $zip);
}else{ //将文件加入zip对象
$zip->addFile($path."/".$filename);
}
}
}
@closedir($path);
}
/**
* 使用ZipArchive生成压缩文件
*/
public function zips($download_name){
$zip=new \ZipArchive();
if($zip->open("./ziprar/".$download_name.'.zip', \ZipArchive::CREATE) === TRUE){
$this->addFileToZip("./ziprar/$download_name"., $zip);
$zip->close(); //关闭处理的zip文件
}
//判断域名是http还是https
if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
$h= 'https://'.$_SERVER['HTTP_HOST'];
} elseif ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
$h= 'https://'.$_SERVER['HTTP_HOST'];
} elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
$h= 'https://'.$_SERVER['HTTP_HOST'];
}else{
$h= 'http://'.$_SERVER['HTTP_HOST'];
}
$url = $h."/ziprar/".$download_name.".zip";
//下载文件名
$file_dir = ROOT_PATH . 'public/ziprar/' .$download_name.'.zip';
$this->deldir(ROOT_PATH . 'public/ziprar/' .$download_name.'/');
$this->success('压缩成功,下载中...', $url,'压缩成功');
}
/**
* 删除文件夹,只保留压缩文件
*/
function deldir($dir) {
//先删除目录下的文件:
$dh=opendir($dir);
while ($file=readdir($dh)) {
if($file!="." && $file!="..") {
$fullpath=$dir."/".$file;
if(!is_dir($fullpath)) {
unlink($fullpath);
} else {
$this->deldir($fullpath);
}
}
}
closedir($dh);
//删除当前文件夹:
if(rmdir($dir)) {
return true;
} else {
return false;
}
}相关内容
常见合同模板的官方下载渠道
ChatGPT与AI绘画的本质
离职时必须清理的电脑文...
微信免费听歌,畅享 QQ 音乐
Deepseek 高效使用指南...
微信聊天记录迁移
如何去除上网冲浪的广告
微信好友描述功能比备注...
-
如何使用php与数据库进行交互
2024-03-04 1224
-
摄影专业分享摄影技巧
2025-06-30 1338
-
什么是闰秒?这个困扰我50年的问题终于要被解决了?
2024-05-10 1517
-
公众号主体变更后,批量更新openid
2021-04-07 859
-
PHP模拟浏览器上传文件(数据流形式上传)
2025-04-07 800
-
ChatGPT-4o怎么免费使用?含Mac客户端、免费ChatGPT-4o服务
2025-03-04 1426
-
为什么我国没有ChatGPT那样强大的AI智能系统
2024-03-16 1348
-
NodeJs文本相似度去重脚本
2025-04-07 1098
-
如何访问有密码的电脑
2025-06-21 1162
-
微信公众号支付(JSAPI)对接方法,详细教程
2024-02-06 1442
文章评论 (0)
- 这篇文章还没有收到评论,赶紧来抢沙发吧~


进入有缘空间
点击分享文章