博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP实现压缩目录zip
阅读量:6583 次
发布时间:2019-06-24

本文共 3689 字,大约阅读时间需要 12 分钟。

第一步:创建MakeZip类文件

array( 'originName' => $dir_path, 'is_dir' => true, 'children' => array() ) ); $key = array_keys($relationArr); $val = array_values($relationArr); $this->modifiyFileName($dir_path, $relationArr[$dir_path]['children']); $zip = new ZipArchive(); //ZIPARCHIVE::CREATE没有即是创建 $zip->open($zipName, ZipArchive::CREATE); $this->zipDir($key[0], '', $zip, $val[0]['children']); $zip->close(); $this->restoreFileName($key[0], $val[0]['children']); return true; } function zipDir($real_path, $zip_path, &$zip, $relationArr) { $sub_zip_path = empty($zip_path) ? '' : $zip_path . '\\'; if (is_dir($real_path)) { foreach ($relationArr as $k => $v) { if ($v['is_dir']) { //是文件夹 $zip->addEmptyDir($sub_zip_path . $v['originName']); $this->zipDir($real_path . '\\' . $k, $sub_zip_path . $v['originName'], $zip, $v['children']); } else { //不是文件夹 $zip->addFile($real_path . '\\' . $k, $sub_zip_path . $k); $zip->deleteName($sub_zip_path . $v['originName']); $zip->renameName($sub_zip_path . $k, $sub_zip_path . $v['originName']); } } } } function modifiyFileName($path, &$relationArr) { if (!is_dir($path) || !is_array($relationArr)) { return false; } if ($dh = opendir($path)) { $count = 0; while (($file = readdir($dh)) !== false) { if(in_array($file,array('.', '..', null))) continue; //无效文件,重来 if (is_dir($path . '\\' . $file)) { $newName = md5(rand(0, 99999) . rand(0, 99999) . rand(0, 99999) . microtime() . 'dir' . $count); $relationArr[$newName] = array( 'originName' => iconv('GBK', 'UTF-8', $file), 'is_dir' => true, 'children' => array() ); rename($path . '\\' . $file, $path . '\\' . $newName); $this->modifiyFileName($path . '\\' . $newName, $relationArr[$newName]['children']); $count++; } else { $extension = strchr($file, '.'); $newName = md5(rand(0, 99999) . rand(0, 99999) . rand(0, 99999) . microtime() . 'file' . $count); $relationArr[$newName . $extension] = array( 'originName' => iconv('GBK', 'UTF-8', $file), 'is_dir' => false, 'children' => array() ); rename($path . '\\' . $file, $path . '\\' . $newName . $extension); $count++; } } } } function restoreFileName($path, $relationArr) { foreach ($relationArr as $k => $v) { if (!empty($v['children'])) { $this->restoreFileName($path . '\\' . $k, $v['children']); rename($path . '\\' . $k, iconv('UTF-8', 'GBK', $path . '\\' . $v['originName'])); } else { rename($path . '\\' . $k, iconv('UTF-8', 'GBK', $path . '\\' . $v['originName'])); } } }}

第二步:调用index.php文件

zip('./demo/','./folder/demo.zip'); if(!$res){ throw new Exception('压缩失败'); } echo 'success';}catch (Exception $e){ echo $e->getMessage();}

|--补充

MakeZip类文件中所实例化
ZipArchive类 需开启PHP支持ZipArchive
在php.ini文件中将extension=php_zip.dll  开头的;的去掉。

转载于:https://www.cnblogs.com/lonmyblog/p/9366749.html

你可能感兴趣的文章
python利用utf-8编码判断中文字符
查看>>
简单的jquery代码实现表单验证
查看>>
递归算法简单介绍
查看>>
ORA-00119 LOCAL_LISTENER错误,LRM-00109
查看>>
matlab-基础 abs 获取字符的ASCII码
查看>>
Jquery easyUI 使用资料汇总
查看>>
vue 源码分析资料
查看>>
网络基础知识--网络架构及OSI七层协议
查看>>
Gradle初体验
查看>>
设置div边距
查看>>
我的友情链接
查看>>
sybase 整库 备份 使用 dump load 以及启动 停止Sybase
查看>>
隐蔽可扩展PHP Webshell – Weevely 1.0
查看>>
如何让Yii框架支持多个数据库
查看>>
C#中winform使用相对路径读取文件的方法
查看>>
Linux 的计划任务
查看>>
linux系统inode被无故添满
查看>>
一些美剧
查看>>
android核心基础(12)_创建模拟器时常见问题
查看>>
[置顶] 用户权限管理
查看>>