原本地址:https://blog.yayuanzi.com/9600.html

找了好久,终于找到个博客有说这个的,具体的请看下面的代码

PHP中有个解压缩的扩展库ZipArchive(),可以用来实现解压缩的功能。当我使用ZipArchive做一个压缩文件夹及子文件夹的功能时却遇到一个问题,ZipArchive不能直接操作文件夹,也就是ZipArchive不能直接压缩文件夹。幸好,ZipArchive提供了两个方法addEmptyDir()和addFromString(),我们可以通过这两个方法来实现文件夹的压缩。

解决思路:遍历文件夹,如果是子文件夹,使用addEmptyDir()创建一个空文件夹;如果是子文件,使用addFromString()以字符串的形式将文件添加到对应的目录。

/**
* 压缩文件夹及文件
* @param type $source        需要压缩的文件夹/文件路径
* @param type $destination    压缩后的保存地址
* @param type $folder        文件夹前缀,保存时需要去掉的父级文件夹
* @return boolean
*/
function Zip($source, $destination,$folder='')
{if (!extension_loaded('zip') || !file_exists($source)) {return false;}$zip = new ZipArchive();if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {return false;}$source = str_replace('\\', '/', $source);$folder = str_replace('\\', '/', $folder);if (is_dir($source) === true) {// $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);$files = new \RecursiveDirectoryIterator($source,\RecursiveIteratorIterator::SELF_FIRST);foreach ($files as $file) {$file = str_replace('\\', '/', $file);// Ignore "." and ".." foldersif( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )continue;// $file = realpath($file);if (is_dir($file) === true) {$zip->addEmptyDir(str_replace($folder . '/', '', $file . '/'));} else if (is_file($file) === true) {$zip->addFromString(str_replace($folder . '/', '', $file), file_get_contents($file));}}} else if (is_file($source) === true) {$zip->addFromString(basename($source), file_get_contents($source));}return $zip->close();}

ZipArchive压缩文件夹[转载]相关推荐

  1. 【转载】用java压缩文件夹/文件

    压缩文件夹代码: import java.io.File; import org.apache.tools.zip.ZipOutputStream; //这个包在ant.jar里,要到官方网下载 im ...

  2. php 复制文件夹并压缩到最小_PHP压缩文件夹的方法

    PHP压缩文件夹的方法 public function addFileToZip($path, $zip) { $handler = opendir($path); //打开当前文件夹由$path指定 ...

  3. C#利用SharpZipLib解压或压缩文件夹实例操作

    最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. 1)下载SharpZipLib.dll,在http://www.icsharpcode ...

  4. php怎么压缩文件夹,PHP压缩文件夹 php

    $path = PUBLIC_DIR.'/images/'; //待压缩文件夹父目录 $zipPath = PUBLIC_DIR.'/images_zip/'; //压缩文件保存目录 !is_dir( ...

  5. Python zipfile 压缩文件夹

    本文仅供学习交流使用,如侵立删!demo下载见文末 zipfile 压缩文件夹 def zipDir(self, dirpath, outFullName):"""压缩指 ...

  6. 利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹

    利用WinRAR命令行压缩文件或文件夹 2007-11-14 15:07 压缩文件夹winrar.exe a -ag -k -r -s -ibck c:/bak.rar c:/dat/ 压缩多个文件 ...

  7. java 压缩文件夹_java 实现压缩文件(单文件 或 文件夹)

    接着上篇了解一下java压缩实现过程,下面的是支持 单文件 或 文件夹 压缩的实现,使用递归. 效果: 代码: package com.gx.compress; import java.io.Buff ...

  8. QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹

    有很多用户想要知道怎么样才能通过QQ邮箱来发送自己的一些文件压缩包,应该怎么操作呢?不要慌,现在小编就给大家分享一下,下面一起来学习操作步骤吧! 其实,无论何种邮箱都无法发送文件夹,都只能对文件进行操 ...

  9. win7压缩文件夹怎么压缩到最小

    在我们日常使用win7系统的过程中,压缩文件作为经常使用的东西相信很多小伙伴都对它不陌生,由于其占用空间小,所以网站下载的文件大多都是压缩包格式.很多时候我们和朋友分享文件也以压缩包的形式传输.接下来 ...

最新文章

  1. 成为“首席AI架构师”的全流程方法论
  2. 四川网络推广介绍什么样的网站架构更能吸引蜘蛛爬行抓取?
  3. 计算机网络体系结构最有影响的标准,浅谈计算机网络中的体系结构
  4. Spring----AOP的术语
  5. ai二维码插件_超实用的AI脚本插件合集2.0免费分享,让你的设计快人一步
  6. Loadrunner 第一个场景设计Controller
  7. python:读取mat文件
  8. 位移密码算法(js)
  9. 苹果手机怎么投影到墙上_手机怎么投屏到投影仪上?这篇图文教程教你轻松搞定...
  10. CPU卡指令返回错误集
  11. win10计算机搜索记录怎么删除,win10系统清除电脑里搜索记录的操作方法
  12. 《你若安好,便是晴天》
  13. mini2440硬件篇之Nand Flash
  14. 图解机器学习-l2约束的最小二乘学习法-matlab源码
  15. 【WINDOWS / DOS 批处理】for命令详解(一)
  16. FairyGUI-GComponent组件
  17. 校外培训机构被叫停,中止营业,这属于营业中断险的保障范围吗?
  18. 植物大战僵尸2010年度版C语言修改阳光数
  19. 带你了解现有UWB技术及原理
  20. 错误:端口被占用解决办法

热门文章

  1. IE浏览器打不开了...
  2. SRS Premium Sound音效增强软件
  3. 使用水库模型分析丰田生产方式
  4. 【rmzt:火影忍者佩恩动漫主题】
  5. 单片机实现数字滤波——加权平均滤波
  6. 好文推荐:强悍VC:谍影迷踪
  7. S50卡AB秘钥的作用,以及控制位的用法
  8. DETA10惯性导航产品介绍
  9. vb修改注册表!!调用WSH实现
  10. KEAZ128学习(三)--- GPIO和PORT